Activity加载模式之singleInstance(单实列模式)

来源:互联网 发布:酷狗网络检测异常 编辑:程序博客网 时间:2024/06/03 17:41

singleInstance(单实列模式):

在这种加载模式下,系统保证无论从哪个Task中启动目标Activity,之后创建一个目标Activity,并会使用一个全新的Task栈来装载Activity实列。

当系统采用singleInstance(单实列模式)启动目标Activity时,可分为如下两种情况:

1:如果将要启动的目标Activity不存在,系统会先创建一个全新的Task,再创建目标Activity的实列,并将它加入新的Task的栈顶。

2:如果将要启动的目标Activity已经存在,无论它为于哪个应用程序中,无论它位于哪个Task中,系统将会把该Activity所在的Task转到前台,从而使该Activity显示出来。

需要指出的是,采用singleInstance(单实列模式)加载Activity总是位于Task栈顶,采用singleInstance(单实列模式)加载Activity所在Task只包含该Activity。


下面举例说明:

public class SingleInstanceTest extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
this.setContentView(layout);
TextView tv = new TextView(this);
tv.setText("Activity为:"+this.toString()
+"\n"+", Tast ID为:"+this.getTaskId());
Button button =new Button(this);
button.setText("启动ThirdActivity");
layout.addView(tv);
layout.addView(button);
button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent(SingleInstanceTest.this,
ThirdActivity.class);
startActivity(intent);
}
});

}

}

上面红色粗体字代码指定单击按钮时会启动 ThirdActivity ,将该 ThirdActivity 配置成singleInstance(单实列模式),而且将该Activity的exported属性配置成true——表明该Activity可被其他应用启动。

<activity
            android:name="cn.scxh.singleinstance.ThirdActivity"
            android:exported="true"
            android:label="被启动的界面"
            android:launchMode="singleInstance" >
 </activity>


public class ThirdActivity extends Activity {
           @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    this.setContentView(layout);
    TextView tv = new TextView(this);
    tv.setText("Activity为:"+this.toString()
    +"\n"+", Tast ID为:"+this.getTaskId());
    Button button =new Button(this);
    button.setText("启动SingleInstanceTest");
    layout.addView(tv);
    layout.addView(button);
        button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
Intent intent = new Intent(ThirdActivity.this,
SingleInstanceTest.class);
startActivity(intent);
}
});

       
        }
}


0 0