我想实现的一个方案是两个activity相互传递值,而且这两个activity都不finish,而是保持在后台。
当前有四种加载模式android:launchMode

  • standard:默认 ,每次在栈内只要startactivity都会产生一个新的activity
  • singleTop:栈顶单例,如果此activity在栈顶则不产生新的activity,如果不在栈顶则产生新的activity
  • singleTask:栈内单例 ,
  • singleInstance:全局单例,在新栈中创建一个activity,并一直保持。

注意当调用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虽然符合我的需求,但是我没有运用它来解决我的问题。

更多相关文章

  1. Android与Flutter桥接指南
  2. Android(安卓)数据库创建字段时的数据类型
  3. Android(安卓)OpenGL ES 绘图 --简单绘图
  4. Android中定时任务的实现(总结)
  5. 卷二 Dalvik与Android源码分析 第二章 进程与线程 2.2 Dalvik线
  6. android studio 2.3.1 NDK开发入门实例
  7. android:taskAffinity使用详解
  8. Android(安卓)的一些基本问题解决方法(android studio)
  9. MTP 看不到软件创建的文件夹(Android端)

随机推荐

  1. Android WiFi 架构总览(模块及接口)
  2. ionic build android log
  3. 播放音乐时的状态条使用
  4. Android AD Manifest
  5. Android(安卓)中的 values XML
  6. 分享:Android程序员,必备精品网站大汇总
  7. android打开关闭屏幕
  8. ionic emulate android log
  9. Android中ListVIew高度自适应,解决ScrollV
  10. cordova入门教程(五)给android apk签名