Многопоточная функция Python с глобальными переменными

Добавление дополнительной информации в верхней части высоко оцененного ответа (добавлен дополнительный раздел KILLABLE и следующий набор методов, которые будут вызываться в жизненном цикле):

Источник: разработчик .android.com

Обратите внимание на столбец «Killable» в приведенной выше таблице - для тех методов, которые отмечены как подлежащие уничтожению , после того, как этот метод возвращает процесс, в котором эта активность может быть убита системой, в любой момент без какой-либо другой строки исполняемого кода.

Из-за этого вы должны использовать метод onPause() для записи любого постоянные данные (например, редактирование пользователя) для хранения. Кроме того, метод onSaveInstanceState(Bundle) вызывается перед тем, как помещать активность в такое фоновое состояние, позволяя вам сэкономить любое динамическое состояние экземпляра в вашей деятельности в заданное Bundle, которое позднее будет получено в onCreate(Bundle), если действие необходимо воссоздать.

Обратите внимание, что важно сохранить постоянные данные в onPause() вместо onSaveInstanceState(Bundle), поскольку последний не является частью обратных вызовов жизненного цикла, поэтому не будет вызываться в каждой ситуации, как описано в его документации.

Я хотел бы добавить еще несколько методов. Они не перечислены как методы жизненного цикла, но они будут называться во время жизненного цикла в зависимости от некоторых условий. В зависимости от вашего требования, возможно, вам придется реализовать эти методы в своем приложении для правильной обработки состояния.

onPostCreate(Bundle savedInstanceState)

Вызывается, когда запуск активности завершен (после вызова onStart() и onRestoreInstanceState(Bundle)).

blockquote>
onPostResume()

Вызывается, когда возобновление активности завершено (после того, как был вызван onResume()).

blockquote>
onSaveInstanceState(Bundle outState)

Вызывается для извлечения состояния каждого экземпляра из активности до его убийства, состояние может быть восстановлено в onCreate(Bundle) или onRestoreInstanceState(Bundle) (связка, заполненная этим методом, будет передана обоим).

blockquote>
onRestoreInstanceState(Bundle savedInstanceState)

Этот метод вызывается после onStart(), когда активность повторно инициализируется из ранее сохраненного состояния, указанного здесь в savedInstanceState.

blockquote>

Мой код приложения, используя все эти методы:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText txtUserName;
    private EditText txtPassword;
    Button  loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Ravi","Main OnCreate");
        txtUserName=(EditText) findViewById(R.id.username);
        txtPassword=(EditText) findViewById(R.id.password);
        loginButton =  (Button)  findViewById(R.id.login);
        loginButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        Log.d("Ravi", "Login processing initiated");
        Intent intent = new Intent(this,LoginActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("userName",txtUserName.getText().toString());
        bundle.putString("password",txtPassword.getText().toString());
        intent.putExtras(bundle);
        startActivityForResult(intent,1);
       // IntentFilter
    }
    public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
        Log.d("Ravi back result:", "start");
        String result = resIntent.getStringExtra("result");
        Log.d("Ravi back result:", result);
        TextView txtView = (TextView)findViewById(R.id.txtView);
        txtView.setText(result);

        Intent sendIntent = new Intent();
        //sendIntent.setPackage("com.whatsapp");
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
        sendIntent.setType("text/plain");
        startActivity(sendIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Ravi","Main Start");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("Ravi","Main ReStart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Ravi","Main Pause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Ravi","Main Resume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("Ravi","Main Stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Ravi","Main OnDestroy");
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onPostCreate(savedInstanceState, persistentState);
        Log.d("Ravi","Main onPostCreate");
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d("Ravi","Main PostResume");
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
}

Вход в систему:

public class LoginActivity extends AppCompatActivity {

    private TextView txtView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        txtView = (TextView) findViewById(R.id.Result);
        Log.d("Ravi","Login OnCreate");
        Bundle bundle = getIntent().getExtras();
        txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
        //Intent  intent = new Intent(this,MainActivity.class);
        Intent  intent = new Intent();
        intent.putExtra("result","Success");
        setResult(1,intent);
       // finish();
    }
}

выход: (до паузы)

D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Выход

: (после возобновления паузы)

D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

Примечание что onPostResume() вызывается, хотя он не цитируется как метод жизненного цикла.

-1
задан Wolph 13 July 2018 в 08:00
поделиться