最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述AndroidManifest具体解释之Application(有图更好懂)相关的知识,希望能为你提供帮助。
可以包括的标签:
- < activity>
- < activity-alias>
- < service>
- < receiver>
- < provider>
- < uses-library>
android:process
默认情况下,android为每一个应用程序创建一个单独的进程,全部组件执行在该进程中,这个默认进程的名字通常与该应用程序的包名同样。比方
< manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lt.mytest" >
那么该程序默认的进程名为com.lt.mytest
设置该属性能够使得本应用程序与其他应用程序共享同样的进程,只当这两个应用程序也共享一个拥有同样签名的UserId。
< manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="android.uid.phone" >
与其他应用程序共享的一个Linux User Id的名字。
默认情况下,Android为每一个应用程序分配一个唯一的User Id。
然而。假设有多个应用程序都将该属性设置为一个同样的值,那么它们将共享同样的Id。
假设这些应用程序再被设置成执行在一个同样的进程,它们便能够彼此訪问对方的数据。
android:allowbackup
是否将程序增加到系统的备份和恢复架构中。
android:taskAffinity
Activity的归属,也就是Activity应该在哪个Task中,Activity与Task的吸附关系。默认假设没有设置taskAffinity。则taskAffinity跟包名是一样的
taskAffinity 和 FLAG_ACTIVITY_NEW_TASK可用来决定activity启动时是否须要新建一个task。
我们分四种情况看一下这两个标志对启动activity的影响:(前提:从MainActivity中启动ActivityA)
1)、两个标志都不设置
2)、有FLAG_ACTIVITY_NEW_TASK
3)、无FLAG_ACTIVITY_NEW_TASK有taskAffinity (不同于MainActivity)
4)、有FLAG_ACTIVITY_NEW_TASK有taskAffinity
注意上面的标志都是针对于启动的ActivityA。FLAG_ACTIVITY_NEW_TASK 是在启动ActivityA的Intent中设置的,taskAffinity 是在AndroidManifest中ActivityA中设置,另外注意这里两个actiity的启动模式都设置为standard
1、先看第一中情况:
主要代码:
< activity android:name=".ActivityA" android:launchMode="standard" android:label="@string/title_activityA"> < intent-filter> < action android:name="com.leaves.ipanel.ActivityA"/> < category android:name="android.intent.category.DEFAULT"/> < /intent-filter> < /activity>
MainActivity启动activity
public void onClick(View arg0) { // TODO Auto-generated method stub Log.i(TAG, "--onClick--task id = " + getCurrentTaskId()); Intent intent = new Intent("com.leaves.ipanel.ActivityA"); startActivity(intent); }
启动A之后的堆栈:
文章图片
2、有FLAG_ACTIVITY_NEW_TASK
我们加入FLAG_ACTIVITY_NEW_TASK
public void onClick(View arg0) { // TODO Auto-generated method stub Log.i(TAG, "--onClick--task id = " + getCurrentTaskId()); Intent intent = new Intent("com.leaves.ipanel.ActivityA"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
启动A之后的堆栈:
3、无FLAG_ACTIVITY_NEW_TASK有taskAffinity (不同于MainActivity)
< activity android:name=".ActivityA" android:launchMode="standard" android:taskAffinity="com.leaves.test.ActivityA" android:label="@string/title_activityA"> < intent-filter> < action android:name="com.leaves.ipanel.ActivityA"/> < category android:name="android.intent.category.DEFAULT"/> < /intent-filter> < /activity>
public void onClick(View arg0) { // TODO Auto-generated method stub Log.i(TAG, "--onClick--task id = " + getCurrentTaskId()); Intent intent = new Intent("com.leaves.ipanel.ActivityA"); startActivity(intent); }
查看一下启动A之后的堆栈:
文章图片
【AndroidManifest具体解释之Application(有图更好懂)】
推荐阅读
- android 给imageView,文字等加上阴影[记录]
- Apple Pay玩补贴也没戏,洗洗睡吧!
- Error:Execution failed for task ':app:processDebugManifest'. 合并冲突
- 获取Android屏幕尺寸控件尺寸状态栏/通知栏高度导航栏高度
- 安卓APK瘦身
- Windows App开发之集合控件与数据绑定
- Android 更新视图函数ondraw() 和dispatchdraw()的区别
- Android中View的事件分发机制——Android开发艺术探索笔记
- app具体介绍界面-01