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

    相关阅读:
    JavaScript设计模式
    AgileConfig-如何使用AgileConfig.Client读取配置
    Java8的Optional:如何干掉空指针?
    k8s之DNS服务器搭建
    如何根据角色批量激活SAP Fiori服务
    被自己以为的GZIP秀到了
    Kubernetes官方java客户端之二:序列化和反序列化问题
    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
    Shiro运行原理?
    Shiro认证过程?

  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7217522.html
Copyright © 2020-2023  润新知