Android 启动模式singleTask和onNewIntent什么时候调用

设置启动模式我们不仅可以节省内存的使用,还能达到更好的体验

 

如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于
onPause
onStop 状态的话
其他应用再发送Intent的话,执行顺序为:
onNewIntent
onRestart
onStart
onResume

我们知道Activity的启动模式有四种:

分别是默认的方式,singleTop,singleTask,singleInstance。

onNewIntent方法的调用和singleTop或者singleTask有关。

当启动模式为singleTop的时候,android系统会先检查栈顶的实例是不是该Activity的实例,如果不是的话,它会创建一个该Activity的实例,并启动onCreate函数。如果栈顶已经存在该实例,则不会再创建该Activity的实例,而且不会执行onCreate函数,而是执行onNewIntent函数来重新启动已经存在的实例。

同理,当启动模式为singleTask的时候,若栈顶不是该Activity的实例的时候,系统会在栈中寻找是否存在这个实例,如存在的话就会把这个实例放在栈顶,并把它之前的实例清除掉。但如果栈顶已经是这个实例的话,就会执行onNewIntent函数。道理和singleTop一样。


public class MainActivity extends AppCompatActivity  {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    processExtraData();
butonBu.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        startActivity(intent);

    }
});
}
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    processExtraData();
}
public void processExtraData(){
    Intent intent = getIntent();
    User user =  (User) intent.getSerializableExtra("user");
    if (user != null){
        textTv.setText(String.valueOf(user.getTextFile())+"");
    }


}
}

 

public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_activiy);
    ButterKnife.bind(this);

    searchBu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            User user = new User("能能");
            Bundle  bundle = new Bundle();
            bundle.putSerializable("user",user);
            Intent intent = new Intent(SecondActivity.this, MainActivity.class);
            intent.putExtras(bundle);
            startActivity(intent);
        }
    });

}
@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    Log.d("Data_", "onDestroy_SecondActivity");
}
}
public class User implements Serializable {
private String TextFile;
public  User(String TextFile){
    this.TextFile = TextFile;


}
public String getTextFile() {
    return TextFile;
}

public void setTextFile(String textFile) {
    TextFile = textFile;
}
}

onNewIntent()的使用详细 http://blog.sina.com.cn/s/blog_9eb164850102v1om.html

你可能感兴趣的:(Android 启动模式singleTask和onNewIntent什么时候调用)