android Activity的杂乱总结
android中Activity可以说是四大组件中用的最为广泛,也是最为基本的一个组件。几乎和用户的所有交互都需要通过Activity来实现。
最近在学习过程中,有一些关于Activity的内容,让我迷惑。所以在此总结一番,以使我的知识更加牢固。
1.Activity的生命周期:
通常的生命周期一看图,都明白,但是今天遇到一个问题,让我很是无解,查了好半天,才查到原因。
刚开始我理解的是,当一个Acitivity强制设置为横屏后,再按电源按键进行锁屏,是不会重新走oncreate的,后来发现不对,因为手机本来是竖屏的,当你锁屏之后,其实又相当于切换到竖屏了,所以还是会调用oncreate的。接下来还有一个问题,那怎么才能屏蔽这个问题呢。在mainfest文件中,给activity配置android:configChanges="orientation|keyboardHidden"。本来应该说就可以了,但是尝试了半天还是不行。于是又搜索了很多,才发现在api 13之后,需要添加screenSize,所以正确的应该是android:configChanges="orientation|keyboardHidden|screenSize"
2.Activity最佳实践
最近买了本郭霖的《第一行代码》虽然内容比较基础,但是还是有很多东西可以学到。比如说,他提到的Activity的启动的最佳实践。
问题描述:
当两个人或者一个团队去完成一个项目的时候,往往每个人负责一个板块,或者功能模块,如果想调用别人写的activity,而我又不知道应该给它传递什么参数,这样就得每次去询问负责这块代码的人,或者直接看他里面是怎么写的。这样的协作效率就有点低。所以,这本书的作者提供了一种方式。如下面,一看就能懂
public class example extends Activity { public staitc void actionStart(Context context ,String p1,String p2) { Intent intent = new Intent(content,this.class); intent.putString("parm1",p1); intent.putString("parm2",p2); context.startActivity(intent); } }
3.在broadcastreciever中启动activity
当我们在广播接收器中接收消息时,可能需要根据情况,去启动App的Activity,但是当我想当然的用普通的方式启动时,会报运行时错误,大概意思就是说,如果在广播中启动Activity时,必须将Intent的flag指定为FLAG_ACTIVITY_NEW_TASK
在flag中必须指定为newTask。
4.Activity中的launchMode与Intent中的flag的关系
经过我查资料与看网友的一些东西,初步得出这样的结论。
launchMode主要针对的是在同一个task中的行为。
而flag是指明,Activiy是否需要创建新的task。
而是否创建新的取决于,acitivy的taskAffinity是否与已有的相同。(默认情况下,一个程序中,所有的activiy的taskAffinity是 相同的)