Activity四种加载模式

android activity四种加载模式,有
》》》standard: 标准模式,这是默认的加载方式
》》》singleTop : task顶单例模式
》》》singleTask : Task内单列模式
》》》singleInstance :全局单列模式

《1》standard: 标准模式,这是默认的加载方式


public class StandardTest extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        this.setContentView(layout);
        // 创建一个TextView来显示该Activity和它所在Task ID。
        TextView tv = new TextView(this);
        tv.setText("Activity为:" + this.toString()
            + "\n" + ",Task ID为:" + this.getTaskId());
        Button button = new Button(this);
        button.setText("启动StandardTest");
        // 添加TextView和Button
        layout.addView(tv);
        layout.addView(button);
        // 为button添加事件监听器,当单击该按钮启动StandardTest
        button.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Log.v("aa", "aaaaaaaaaaaaaaaaaaaaaaa");
                Toast toast = Toast.makeText(StandardTest.this, "hahahha", Toast.LENGTH_LONG);
                toast.show();
                // 创建启动StandardTest的Intent
                Intent intent = new Intent(StandardTest.this
                    , StandardTest.class);
                startActivity(intent);
            }
        });
    }
}

Activity四种加载模式_第1张图片
这段代码运行结果
![这里写图片描述]
this.toString()是当前启动activity的id
this.getTaskId()是当前Task的id
每次点击改变的是当前启动activity的id,不变的是当前Task的id,说明如下图:
Activity四种加载模式_第2张图片

《2》singleTop : task顶单例模式
这种模式和standard模式基本相同,但是有差别,那就是如果当前要启动的目标activity已经在Task栈顶的时候,系统不会创建新的目标activity实例,直接用栈顶的activity实例,如果没有位于栈顶,那么就创建新的实例(即使是启动同一个activity)

《3》singleTask : Task内单列模式

这种主旨 **是同一个Task内只有一个实例**  学习的时候要注意这点

这种分为3种情况:
(1)如果要启动的目标activity不存在,系统将会创建目标activity实 例,并把它加入Task顶部
(2)如果要启动的目标activity已经位于栈顶,此时与singleTop模式行为相同
(3)如果要启动的目标activity已经存在,但是没有在栈顶,系统会把这个目标activity栈内上面的所有Activity移除Task栈,那么相当于当前activity位于栈顶了。

《4》 singleInstance :全局单列模式
这种模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并且会使用一个全新的Task栈来加载该Activity实例。
这个分为两种情况:
(1)如果要启动的目标activity不存在,系统会先创建一个全新的Task,再创建目标Activity实例,并且把它加入新的Task栈顶。
(2)如果要启动的目标activity存在,无论它位于哪个应用程序中,无论它位于哪个Task中,系统会把该Activity所在的Task转到前台,从而使该activity显示

你可能感兴趣的:(android,加载模式)