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



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

posted on 2017-07-21 14:30  slgkaifa  阅读(170)  评论(0编辑  收藏  举报

导航