一共四种启动方式:
- standard
- singleTop
- singleTask
- singlelnstance
standard
standard启动模式每次都会新建一个activity入栈。
这是MainActivity类中的内容
public class MainActivity extends AppCompatActivity {
private Button btnClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity", this.toString());
btnClick = (Button)findViewById(R.id.btnClick);
btnClick.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent inter = new Intent(
MainActivity.this,
MainActivity.class
);
startActivity(inter);
}
});
}
}
向布局文件中添加一个button
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="toFirst"
android:id="@+id/btnClick"/>
点击button会打开一个新的MainActivity.
singleTop
singleTop这种启动模式与上一种差距不大,但是要打开的窗口位于栈顶的时候,就不会在添加了,避免了重复打开的资源浪费。但是不是在栈顶,即便已经打开了,也要再打开一次。
只需要在AndroidManifest.xml种添加一句话就好
<activity android:name=".MainActivity" android:launchMode="singleTop">
<!--其他内容-->
</activity>
然后新建布局文件,内容随意,接着在上一个java类中添加内部类:
public class MainActivity extends AppCompatActivity {
private Button btnTop;
protected void onCreate(Bundle savedInstanceState)
/*
上边已经有的
*/
Button btnTop = (Button)findViewById(R.id.btnTop);
btnTop.setOnClickListener(new TClicklistener());
}
class TClicklistener implements View.OnClickListener {
@Override
public void onClick(View view) {
Intent intent = new Intent(
MainActivity.this,
Main2Activity.class
);
startActivity(intent);
}
}
}
在第一个布局文件中,随便添加一个按钮。
然后就能看见点击第一个按钮不会出现新的窗口,但是点击第二个就会弹出新窗口
singleTask
每次启动时都会检查当前栈中是否存在,若存在,则将之上的全部出栈,若没有,则创建新页面
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<!--其他内容-->
</activity>
如此就好