活动生命周期方法:onPostResume意义

Rav*_*abu 18 android android-lifecycle android-activity

有关活动的官方文档列出了7种生命周期方法.

onPostResume() 没有引用生命周期法.

但我觉得这种方法很重要.

在生命周期中,当一个活动从隐藏到显示状态可见时,

onRestart()
onStart()
onResume()
onPostResume()
Run Code Online (Sandbox Code Playgroud)

已被按顺序调用.

我的代码片段:

package ravindra.projects.my_app_1;

import android.content.Intent;
import android.content.IntentFilter;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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 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);
    }

    @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
    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

实现 onPostResume()通过跳过下面的方法不达到目的?

onRestart(), onStart(), onResume()
Run Code Online (Sandbox Code Playgroud)

如果实施这三种方法有什么好处onPostResume()

onRestart(), onStart(), onResume()
Run Code Online (Sandbox Code Playgroud)

jit*_*555 28

onPostResume:

在活动恢复完成时调用(在调用活动的{@link #onResume}之后).应用程序通常不会实现此方法; 它适用于系统类在应用程序恢复代码运行后进行最终设置.

它会做以下事情

  1. 它将确保用户可以看到屏幕,并将为活动进行最终设置.

  2. 使用代码"what"在消息队列中删除所有待处理的消息帖子.

  3. 检查所有片段是否已恢复,并将控制器FragmentManager管理的所有片段移动到恢复状态.

  4. 对控制器的FragmentManager管理的片段执行任何挂起的操作.

如果你检查生命周期老虎钳它的工作方式如下

  1. onResume() - 活动

  2. onResume() - 片段 check third point as explained above

  3. onPostResume() - 活动

  • 我还在FragmentTransaction中提交片段时使用了**onPostResume()**方法,因为在Activity恢复到原始状态后,可以保证调用该方法,这样我就可以避免**IllegalStateException**发生. (10认同)

Nic*_*oso 6

onPostResume 主要保留用于在任何子类完成恢复后想要完成某种设置的系统操作.

它有用的两件事(可能让你觉得它很重要)是你的嵌套片段也恢复后以及保证应用程序对用户可见时(在onResume期间可能尚未显示)之后执行操作.

在查看Sources时,从方法名称中可能会有点混乱,但如果您记录流程,您将看到发生的情况是

  1. 活动恢复
  2. 片段简历
  3. 在Activity中调用onPostResume

我会为任何未来的读者添加一个警告 - 如果你使用onPostResume来等待你的片段,调用一些get方法(例如),那么你就会有一个糟糕的,不可靠的设计.您应该从片段中获得回调模式,并在准备好时将片段"发送"回活动

  • 感谢您对碎片的谨慎态度. (2认同)