在接入Android SDK的时候,了解了Android多线程后, 我们来了解一下AndroidManifest.xml 和Activitiy.
在Android开发中,无main函数,这个让C\C++\C#程序员不太适应,但是Android提供了Main的入口的,这个就是配置AndroidManifest.xml。
-
AndroidManifest.xml
权威的AndroidManifest.xml请直接看Google官方文档,非常详细和及时。
其中在开发Android SDk接入,需要配置 android:configChanges–keyboard|keyboardHidden|screenSize|orientation。 即当屏幕翻转等变化后,Activity不会“死掉”,会调用Activity.onConfigurationChanged() 方法.
另外,jar包中的activity,都是需要在AndroidManifest.xml声明的。
其中这个属性比较重要 android:launchMode(Activity加载模式)
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式
Activity有四种加载模式:
- standard (默认)
- singleTop
- singleTask
- singleInstance
standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。
singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例
singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
singleInstance:
首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。
-
Activity
Activity概念,可以简述为用户可见的一个大视图的主布局框架,在Android中,每次只能看到一个Activity,两个Activity切换会采用Task任务栈方式调度。
- Activity的生命周期
- 奇怪的是Android屏幕旋转,也是需要销毁Activity的,故需要预先存储、加载数据的。
- 为了实现outlook左右布局,左侧导航+右侧切换视图效果,需要用到FrageMentActivity子类。
- 最后,在Activity之间通信,有2种办法:
- 显示Intent
//显示方式声明Intent,直接启动SecondActivity
Intent it = new Intent(MainActivity.this,SecondActivity.class);
//启动Activity
startActivity(it);
- 隐式Intent
// 实例化Intent
Intent it = new Intent();
//设置Intent的Action属性
it.setAction("com.android.activity.MY_ACTION");
// 启动Activity
startActivity(it);
隐式Intent之所以设置Action后,即可找到可能的Activity,是因为Activity的intent-filter属性对外公开了其可以处理的Action。如系统默认的拨打电话、播放音乐等Activity等。