设置启动模式我们不仅可以节省内存的使用,还能达到更好的体验
如果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