我想实现的一个方案是两个activity相互传递值,而且这两个activity都不finish,而是保持在后台。
当前有四种加载模式android:launchMode
注意当调用finish方法的时候,那么这个activity会被杀死,那么无论什么模式都将直接创建新的activity。
一个activity开启本身activity
当然直接解释文字没有任何说服力,我们直接代码进行展示,然后看出区别;
贴出主要代码
MainActivity
//在界面显示一个TEXT展示出ACTIVITY的实例编号,和TASK编号
TextView textView = (TextView) findViewById(R.id.text);
textView.setText("Activity为"+ this.toString()
+ "\n" + "Task ID为:"+ this.getTaskId());
//点击按钮开启新的activity,这里每次都开启mainactivity
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,MainActivity.class);
startActivity(intent);
}
});
分别四种模式比较
- standard: 栈不变,acitivity编号改变。结论:每次开启新的activity
- singleTop: 栈不变,acitivity编号不变。结论:没有开启新的activity
- singleTask: 栈不变,acitivity编号不变。结论:没有开启新的activity
- singleInstance: 栈不变,acitivity编号不变。结论:没有开启新的activity
一个acitivity开启另一个activity
MainActivity.java
TextView textView = (TextView) findViewById(R.id.text);
textView.setText("Activity为"+ this.toString()
+ "\n" + "Task ID为:"+ this.getTaskId());
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
SecondActivity.java
TextView textView = (TextView) findViewById(R.id.text2);
textView.setText("Activity为"+ this.toString()
+ "\n" + "Task ID为:"+ this.getTaskId());
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab2);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);
}
});
mainActivity—standard
SecondActivity–standard
这样会不断创建新的activity。
mainActivity—singleTop
SecondActivity–standard
同上,也不断创建新的acitivity
mainActivity—singleTask
SecondActivity–standard
MainActivity是唯一的,而SecondAcitivity每次都创建新的
mainActivity—singleInstance
SecondActivity–standard
栈号不同,两者的activity都没生成新的。两者不在同一个栈中,而且按返回按钮每次都生成在新的栈中。
mainActivity—singleTask
SecondActivity–singleTask
SecondActivity每次都创建新的。因为singletask模式是在同一个栈中的,而栈中的两个activity不能相互调换位置,不是说用谁谁就在最上面。
mainActivity—singleTask
SecondActivity–singleInstance
这两个activity分别在两个不同的栈中,所以都可以保持,而不需要销毁。符合我所想的需求,但是按返回按钮时候会finish掉activity所以在此需要重写返回键的方法。
因为我要做的是搜索功能,研究了一下淘宝,他是通过MAIN–>(startActivity)字符串Search–>(startActivityforresult)search页面。每次都是开启新的Search页面,而保持前两个页面。
而我的搜索功能需求是,Main–>(startactivityforresult)字符串search–>传回给MAIN页面进行搜索。我的实现方式是每次对字符串search页面进行刷新。
那么最后我没有运用singleinstance虽然符合我的需求,但是我没有运用它来解决我的问题。