在Android系統中活動Activity的加載模式是大致可以分爲四種,分別是:standard、singleTop、singleTask、singleInstance。而針對於Activity的不同的加載模式直接決定着相應的Activity的生命週期。設置Activity的加載模式實在AndroidManifest.xml中<activity>的配置中加入Android:launcherModel="xxxxxxx".
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模式較爲特殊:他會每次創建時創建一個新的棧用於存儲自己。