您的位置:首页 > 移动开发 > Android开发

Android 四种加 4000 载方式详解(standard singleTop singleTask singleInstance)

2015-08-14 10:46 585 查看


加载模式分类及在哪里配置

Activity有四种加载模式:
standard
singleTop
singleTask
singleInstance

设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:

<activity android:name="ActivityB" android:launchMode="singleTask"></activity>

standard

首先说standard模式,也就是默认模式,不需要配置launchMode。先只写一个名为ActA的Activity:

[html] view
plaincopyprint?

package com.toc.testactivity;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import org.w3c.dom.Text;

/**

* Created by yuanfei on 2015/8/12.

*/

public class ActivityA extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.maina);

        Button btn = (Button) findViewById(R.id.btn);

        Log.i("Button","Button");

        btn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                Intent it = new Intent(ActivityA.this,ActivityA.class);

                startActivity(it);

            }

        });

        TextView tv = (TextView) findViewById(R.id.tv);

        tv.setText(this+"");

    }

}


其中当ActivityA跳转到ActivityA  点击按钮几次  每次都是新建ActivityA 每次都重新执行下里面的代码  

现在点Android设备的回退键,可以看到是按照刚才创建Activity实例的倒序依次出现,类似退栈的操作,而刚才操作跳转按钮的过程是压栈的操作。

singleTop

singleTop和standard模式,都会将intent发送新的实例(后两种模式不发送到新的实例,如果已经有了的话)。不过,singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

还是用刚才的示例,只需将launchMode改为singleTop,就能看到区别。
运行的时候会发现,按多少遍按钮,都是相同的ActiA实例,因为该实例在栈顶,因此不会创建新的实例。如果回退,将退出应用。
singleTop模式,可用来解决栈顶多个重复相同的Activity的问题。如果是A Activity跳转到B Activity,再跳转到A Activity,行为就和standard一样了,会在B Activity跳转到A Activity的时候创建A Activity的新实例,因为当时的栈顶不是A Activity实例。

singleTask

singleTask模式和后面的singleInstance模式都是只创建一个实例的。

当intent到来,需要创建singleTask模式Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
把上面singleTop的实例中的ActA的launchMode改为singleTask,ActB的改为standard。那么会发现在ActA界面中按一次按钮: 

singleInstance

http://blog.csdn.net/tiancizhenai/article/details/7037787
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: