加载模式分类及在哪里配置
Activity有四种加载模式:
- standard
- singleTop
- singleTask
- singleInstance
设置的位置在AndroidManifest.xml文件中activity元素的android:launchMode属性:
<activity android:name="ActivityB" android:launchMode="singleTask"></activity>standard
首先说standard模式,也就是默认模式,不需要配置launchMode。先只写一个名为ActA的Activity:
- 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.youkuaiyun.com/tiancizhenai/article/details/7037787