AndroidManifest具体解释之Application(有图更好懂)

最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述AndroidManifest具体解释之Application(有图更好懂)相关的知识,希望能为你提供帮助。
可以包括的标签:

  1.       < activity>
  2.       < activity-alias>
  3.       < service>
  4.       < receiver>
  5.       < provider>
  6. < 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之后的堆栈: 

AndroidManifest具体解释之Application(有图更好懂)

文章图片

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之后的堆栈:

AndroidManifest具体解释之Application(有图更好懂)
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(有图更好懂)

文章图片

【AndroidManifest具体解释之Application(有图更好懂)】


    推荐阅读