在Android系统中活动Activity的加载模式是大致可以分为四种,分别是:standard、singleTop、singleTask、singleInstance。而针对于Activity的不同的加载模式直接决定着相应的Activity的生命周期。设置Activity的加载模式实在AndroidManifest.xml中
1.standard
standard 是android Activity的默认加载模式,所以使用标准加载模式时可以不进行配置设置,同样你也可以进行相应的配置。
看下面一个实例:下面展示的MainActivity得代码:
package com.example.testlaunchermodel;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text = (TextView) findViewById(R.id.textView1);
text.setText(this.toString());
Button but = (Button) findViewById(R.id.button1);
but.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(MainActivity.this, MainActivity.class);
startActivity(intent);
}});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
SecendActivity的代码结构如下:
package com.example.testlaunchermodel;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class SecendActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secend);
TextView text = (TextView) findViewById(R.id.threadId);
text.setText(this.toString());
Button but = (Button)findViewById(R.id.secendButton);
but.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setClass(SecendActivity.this, MainActivity.class);
startActivity(intent);
}});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.secend, menu);
return true;
}
}
分别在MainAcitivy和SecendActivity的布局上添加一个TextView和Button。TextView用于显示现在的Activity的序列号,button的事件用来完成不同的Activity之间的跳转活动。
从MainActivity跳转到SecendActivity再跳转回来这个循环的过程会发现每次创建的活动的序列号都是不一样的从而说明:
standard的加载模式不管是否已经存在Activity都会再次创建一个Acitivy,同时将新创建的Activity加入栈顶。所以在这种加载模式下需要多次返回才能退出。
下面我不再一一介绍具体的代码,只需在上述代码基础修改相应的Activity的加载模式就好。就可以看到相应的效果。
2.singleTop
singleTop模式就是在Activity处在栈顶时直接利用不在栈顶时创建新的Activity压入栈。
3.singleTask
singleTask模式如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。
4.singleInstance
singleInstance模式较为特殊:他会每次创建时创建一个新的栈用于存储自己。