Данные пакета хранятся в переменной - PullRequest
1 голос
/ 19 января 2020

Я работаю над простым Android Студийным приложением, и у меня есть вопрос, касающийся процесса сохранения информации в пакет, чтобы сохранить ее для следующего экземпляра при возобновлении активности (когда телефон просыпается из спать, точнее). Если я собираюсь что-то сказать неправильно или я что-то не так понял, поправьте меня.

Поэтому я сохранил текст текстового представления в пакет в onSaveInstanceState и «восстановил» его в onRestoreInstanceState , чтобы при повороте телефона содержимое текстового представления не удалялось и сохранялось. Теперь, чтобы сохранить соответствующий текст в связке, я использовал переменную final (которую я не очень понимаю, почему она должна быть final , если вы сохраняете что-то из пакета в ней , хотя это работает в обоих направлениях, но, возможно, есть объяснение безопасности или что-то в этом роде), как в примере ниже. У меня есть несколько вопросов относительно всего:

  1. Если переменная будет final , и вы сохраните в ней подсказку, что следует сохранить позже, то как мы можем позже сохраните значение текста, который мы не хотим потерять снова, так как это final ? Согласно Википедии:

    После назначения конечной переменной она всегда содержит одно и то же значение. Если конечная переменная содержит ссылку на объект, то состояние объекта может быть изменено с помощью операций над объектом, но переменная всегда ссылается на один и тот же объект (это свойство final называется нетранзитивностью).

  2. Какова цель сохранения значения, которое мы не хотим потерять, в конечную переменную?

  3. (Наиболее важно) Если все переменные удаляются после выполнения программы, тогда как мы можем сохранить значение чего-то, что мы не хотим потерять, во что-то, что должно быть удалено, и при этом сохранить значение?

PS Я беру Android Студийный курс, и я действительно застрял здесь, и поэтому я спрашиваю.

package academy.learnprogramming.buttonclickapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private EditText userInput;
    private TextView textView;
    private static final String TAG = "MainActivity";
    private final String TEXT_CONTENTS = "TextContents";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.d(TAG, "onCreate: in");

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        userInput = findViewById(R.id.editText);
        Button button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);

        textView.setMovementMethod(new ScrollingMovementMethod());

        View.OnClickListener ourOnClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String result = userInput.getText().toString();
                result += "\n";
                textView.append(result);
                userInput.setText("");
            }
        };
        button.setOnClickListener(ourOnClickListener);
        Log.d(TAG, "onCreate: out");
    }

    @Override
    protected void onStart() {
        Log.d(TAG, "onStart: in");
        super.onStart();
        Log.d(TAG, "onStart: out");
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        Log.d(TAG, "onRestoreInstanceState: in");
        super.onRestoreInstanceState(savedInstanceState);
        textView.setText(savedInstanceState.getString(TEXT_CONTENTS));
        Log.d(TAG, "onRestoreInstanceState: out");
    }

    @Override
    protected void onRestart() {
        Log.d(TAG, "onRestart: in");
        super.onRestart();
        Log.d(TAG, "onRestart: out");
    }

    @Override
    protected void onResume() {
        Log.d(TAG, "onResume: in");
        super.onResume();
        Log.d(TAG, "onResume: out");
    }

    @Override
    protected void onPause() {
        Log.d(TAG, "onPause: in");
        super.onPause();
        Log.d(TAG, "onPause: out");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.d(TAG, "onSaveInstanceState: in");
        outState.putString(TEXT_CONTENTS, textView.getText().toString());
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState: out");
    }

    @Override
    protected void onStop() {
        Log.d(TAG, "onStop: in");
        super.onStop();
        Log.d(TAG, "onStop: out");
    }

    @Override
    protected void onDestroy() {
        Log.d(TAG, "onDestroy: in");
        super.onDestroy();
        Log.d(TAG, "onDestroy: out");
    }
}

Activity Life Cycle

...