标签:onclick alt chmod 启动会 text 情况 art img lag
Activity四种启动模式
任务栈
Activity的Flags很多,这里介绍集中常用的,用于设定Activity的启动模式。可以在启动Activity时,通过Intent的addFlags()方法设置。
(1)FLAG_ACTIVITY_NEW_TASK 其效果与指定Activity为singleTask模式一致。
(2)FLAG_ACTIVITY_SINGLE_TOP 其效果与指定Activity为singleTop模式一致。
(3)FLAG_ACTIVITY_CLEAR_TOP 具有此标记位的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。如果和singleTask模式一起出现,若被启动的Activity已经存在栈中,则清除其之上的Activity,并调用该Activity的onNewIntent方法。如果被启动的Activity采用standard模式,那么该Activity连同之上的所有Activity出栈,然后创建新的Activity实例并压入栈中。
四种启动模式的基础功能就不再赘述;
(1)如果在Service或Application中启动一个Activity,其并没有所谓的任务栈,怎么实现?
(2)除了singleInsatance模式,有没有其他方法使activity独立一个栈?
(3)何时调用onNewIntent()方法?
(4)打开a、b、c后在c中如何关闭a、b
(5)其他:
此时按back键ActivityC-->ActivityA-->ActivityB
public class ActivityA extends Activity {//activity代码、b、c基本相同
private static final String ACTIVITY_NAME = "ActivityA";
private static final String LOG_TAG = "test_activity_stack";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_btn);
refreshTask();
findViewById(R.id.btn_task).setOnClickListener(v -> startActivity(new Intent(this, ActivityB.class)));
}
@Override
protected void onDestroy() {
super.onDestroy();
refreshTask();
}
private void refreshTask() {
int taskId = getTaskId();
Log.i(LOG_TAG, ACTIVITY_NAME + "所在的任务的id为: " + taskId);
((TextView) findViewById(R.id.tv_task)).setText(LOG_TAG + " " + ACTIVITY_NAME + "所在的任务的id为: " + taskId);
}
}
如上图三个Activity分别设置standard、singleInstance、standard;运行起来的结果
可以看到,A在任务栈4973启动B,启动了一个任务栈4974;启动C又回到了4973;
以此点击back键退出
首先从C回到A,再之后回到4974任务栈的B(如果A、C所在的4973仍有其他activity,会一直退到栈空才会回到B)
标签:onclick alt chmod 启动会 text 情况 art img lag
原文地址:https://www.cnblogs.com/ivoo/p/10727289.html