activity启动方式可能带来的一些bug
来源:互联网 发布:非农数据网址 编辑:程序博客网 时间:2024/05/01 23:43
在做项目的时候,突然碰到几个界面的来回跳转之后,关闭activity,要么出现重复,要么界面关闭不了(按back键只是退出一个特定的activity)。出现这样的情况就要考虑activity的启动方式了。
1、activity的启动方式总结
(1)standard
android总会为目标activity创建一个新的实例,并把activity添加到当前Task中,即不会启动新的TASK,新的activity会添加到原有的Task中。(hashcode不同,TSAKid相同)
(2)singletop
复用Task栈顶Activity实例,其余与standard方式相同。
(3)singleTask
在同一个Task中只有一个acyivity实例。(若该实例存在且不再栈顶,则会移除它前面所有的activity实例)
(4)singleInstance(用的多)
系统保证无论从那个Task启动目标activity,只会创建一个目标activity实例,并使用一个全新的TASK来加载该实例。
1)若不存在该目标activity则创建一个全新的TASK。在把该目标实例加入TASK栈顶。
2)若存在该目标activity,系统会不顾一切把他所在的TASK转到前台显示出来。
2、使用startActivity方法启动的activity界面要考虑activity的TASK管理方式。在清单文件中配置activity的启动模式,避免出现bug,关闭不了,或是重复界面的出现。
3、实现在一个activity中关闭另外一个activity
(1)在第一个activity中用一个静态非私有字段来保存该类的实例。然后在另外一个activity 中获得该字段并调用finish方法,完成该操作。
(2)具体代码如下:
public class OneActivity extends Activity { static OneActivity instance;//关键 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_one); instance=OneActivity.this;//关键 Log.i("OneActivity", "onCreate"); } public void start(View v){ startActivity(new Intent(OneActivity.this,TwoActivity.class)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.one, menu); return true; } @Override protected void onDestroy() { Log.i("OneActivity", "第一个activity关闭"); super.onDestroy(); } }
public class TwoActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); Log.i("TwoActivity", "onCreate"); } public void back(View v){ startActivity(new Intent(TwoActivity.this,OneActivity.class)); } public void myStop(View v){ OneActivity.instance.finish(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i("TwoActivity", " onDestroy()"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.one, menu); return true; } }
用
startActivity来回跳转的结果并按back键销毁如下所示:
先跳转到第2个activity,在第2个activity里销毁第一个activity实例,在back退出应用结果:
- activity启动方式可能带来的一些bug
- activity启动方式可能带来的一些bug
- Activity的启动方式
- Activity的启动方式
- Activity的启动方式
- Activity的启动方式
- Instr 带来的BUG
- Android Activity的启动方式
- 启动另一个Activity的方式
- Android 启动Activity的方式
- Android Activity的启动方式
- Activity的四大启动方式
- 88程序锁的BUG(界面启动混乱)修复(利用Activity的启动方式[四种])
- Activity启动另一个Activity的方式
- Activity启动另一个Activity的方式总结
- tomcat7可能带来的问题
- tomcat7可能带来的问题
- tomcat7可能带来的问题
- ROS 教程之 vision : 用各种摄像头获取图像
- 单向链表基础
- lessons learned from the Qlikview loads the data from DB into qvd files
- UIScrollView上的UIButton,既能点击UIButton,又能滑动UIScrollView,但是点击UIButton时间短的话,不会高亮
- 第14周上机实践项目2——带姓名的成绩单(2)
- activity启动方式可能带来的一些bug
- JNI开发入门教程之sayHello(Xubuntu Linux OpenJDK7 Eclipse GCC)
- Failed to instantiate the default view controller for UIMainStoryboardFile 'MainStoryboard' - perhap
- 剖析MFC窗口类框架应用程序
- C++文本搜索引擎
- 禁止Android 横屏竖屏切换 .
- EL表达式个人总结
- 人品计算器
- 第十三周项目4——数组的排列(选择法)