-
MainActivity如下:
[java]package cc.testlaunchmode2;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;import android.content.Intent;/*** Demo描述:* Activity加载模式详解* 在该Demo中主要讨论singleTask** 技术描述:* Activity有四种加载模式-->* 1 standard: 标准(默认)模式* 当通过这种模式来启动Activity时,Android总会为目标* Activity创建一个新的实例,并将该Activity添加到当前* Task栈中.注意,这种方式不会启动新的Task,只是将新的* Activity添加到原有的Task** 2 singleTop: Task顶单例模式* 该模式和standard模式基本一致,但有一点不同:当将要被* 启动的Activity已经位于Task栈顶时,系统不会重新创建* 目标Activity实例,而是直接复用Task栈顶的Activity** 3 singleTask: Task内单例模式* 采用该加载模式时,Activity在同一个Task内只有一个实例.* 当系统采用singleTask模式加载Activity时,又分为以下* 三种情况:* (1)如果将要启动的Activity不存在,那么系统将会创建该* 实例,并将其加入Task栈顶* (2)如果将要启动的Activity已存在,且存在栈顶,那么此时* 与singleTop模式的行为相同* (3)如果将要启动的Activity存在但是没有位于栈顶,那么* 此时系统会把位于该Activity上面的所有其他Activity* 全部移出Task,从而使得该目标Activity位于栈顶** 4 singleInstance: 全局单例模式* 在此种加载模式下,无论从哪个Task中启动目标Activity,只会* 创建一个目标Activity实例且会用一个全新的Task栈来装载该* Activity实例.* 当系统采用singleInstance模式加载Activity时,又分为以下* 两种情况:* (1)如果将要启动的Activity不存在,那么系统将会先创建一个* 全新的Task,再创建目标Activity实例并将该Activity实例* 放入此全新的Task中* (2)如果将要启动的Activity已存在,那么无论它位于哪个应用* 程序,哪个Task中;系统都会把该Activity所在的Task转到* 前台,从而使该Activity显示出来** Android对于Activity的管理方式-->* Android采用Task来管理多个Activity.* 当启动一个APP时,Android就会为之创建一个Task* 然后启动这个应用的入口Activity.* 但是Android并没有为Task提供API,开发者无法真正* 地访问Task,只能调用Activity的getTaskId()方法来* 获取其所在的Task的ID.事实上,我们可以把Task理解成* Activity栈,Task以栈的形式来管理Activity:将不断启* 动的Activity压入栈.即:先启动的Activity被放入栈底,* 后启动的Activity放在Task栈顶** 测试步骤及解释:* 1 进入MainActivity,点击按钮进入AnotherActivity.* 2 此时在AnotherActivity界面.目前在Task栈中有两个* Activity.由下至上为:MainActivity-->AnotherActivity* 3 在AnotherActivity界面点击按钮,系统以标准模式* 再次加载一个MainActivity* 4 此时在MainActivity界面.目前在Task栈中有三个Activity.* 由下至上为:MainActivity-->AnotherActivity-->MainActivity* 5 此时在MainActivity界面,再点击按钮准备进入AnotherActivity* 系统将以singleTask模式再次加载AnotherActivity.正因为* 是以singleTask模式加载,所以会清除AnotherActivity上部* 的所有Activity.* 6 此时在AnotherActivity界面.目前在Task栈中有两个* Activity.由下至上为:MainActivity-->AnotherActivity* 这就和第二步的状态一致了** 备注说明:* 注意配置文件* android:launchMode="standard"* android:name="cc.testlaunchmode2.MainActivity"* ...............................................* android:launchMode="singleTask"* android:name="cc.testlaunchmode2.AnotherActivity"** 参考资料:* Android疯狂讲义(第二版)* Thank you very much*/public class MainActivity extends Activity {private Button mButton;private TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}private void init(){mTextView=(TextView) findViewById(R.id.textView);mTextView.setText("当前Activity:"+"\n"+this.toString()+"\n"+"当前TaskId:"+this.getTaskId());mButton=(Button) findViewById(R.id.button);mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(MainActivity.this, AnotherActivity.class);startActivity(intent);}});}}AnotherActivity如下:[java]package cc.testlaunchmode2;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;import android.content.Intent;public class AnotherActivity extends Activity {private Button mButton;private TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.another);init();}private void init(){mTextView=(TextView) findViewById(R.id.textView);mTextView.setText("当前Activity:"+"\n"+this.toString()+"\n"+"当前TaskId:"+this.getTaskId());mButton=(Button) findViewById(R.id.button);mButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View view) {Intent intent=new Intent(AnotherActivity.this, MainActivity.class);startActivity(intent);}});}}main.xml如下:[ html]<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Activity加载模式详解"android:layout_centerHorizontal="true"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="以singleTask方式启动AnotherActivity"android:layout_centerHorizontal="true"android:layout_marginTop="100dip"/><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"/></RelativeLayout>another.xml如下:[html]<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Activity加载模式详解"android:layout_centerHorizontal="true"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="以standard方式启动MainActivity"android:layout_centerHorizontal="true"android:layout_marginTop="100dip"/><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"/></RelativeLayout>AndroidManifest.xml如下:[html]<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cc.testlaunchmode2"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="14" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:launchMode="standard"android:name="cc.testlaunchmode2.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:launchMode="singleTask"android:name="cc.testlaunchmode2.AnotherActivity"></activity></application></manifest>
-
来源:http://www.2cto.com/kf/201310/249008.html
Activity启动模式详解(二)--->singleTask
最新推荐文章于 2023-01-31 07:00:00 发布