都有哪些详细些。设置后的生命周期是怎么样的,他们之间的区别是什么样的
1、standard(标准模式):一个定义Activity在mainfest中不设置android:launchMode=“standard”,也会默认为standard,standard就是新建一个Activity就在栈中新建一个Activity实例。
2、singleTop(栈顶复用模式):在mainfest中设置singleTop模式时,当前栈顶如果有一个相同的Activity,就不创建而复用栈顶的那个,只要创建新的和栈顶相同的Activity才会复用,复用的Activity就回调onNewIntent方法。
3、singleTask(栈内单例模式):当前栈内只有一个Activity实例,栈内已存activity实例,在其他Activity中开启这个Activity,Android直接把这个实例栈上面的其他Activity实例踢出栈GC掉。
4、singleInstace(堆内单例):设置该模式的Activity实例存在一个单独的任务栈中,整个系统独立的。
设置了singleTop、singleTask、singleInstance这三种模式的Activity,如果开启一个新的Activity页面,栈顶存在相同的实例就复用,都不会重新创建一个新实例,Activity复用后都会调用onNewIntent(Intent intent)方法。
不知道你是否有这样的体会:每次准备面试时会让自己的水平有一点提升,而和一些比较好的面试官交流(被面试)后,自己更能看清楚自己的缺点。
每次“被虐”的面试下来,对你都是一次改变的机会。不过你需要有自己的判断,面试官让你发现你的问题所在,但是否要改掉,就不一定了。
谁还没个缺点!
温伯格的《咨询的奥秘》教我们一个伯登法则:“要是你不能改掉缺点,就把他变成特点”。
一个人同一时间不能做太多的事情。我们自己要有自己的关注点,你可以仔细思考面试官发现的问题,但如果和你的现阶段焦点不相关的话,你还是应该把力气放在你关注的事情上。
简单点的做法就是,你只要把一次面试发现的问题都列出来,改掉其中一项最急迫需要改善的。只要你多“被虐”几次后,面试官也不需要再“虐”你了,因为他可以很容易给你下结论了。
小结:
写到这里,并没有费笔墨“安慰”你面试后受伤的心灵,只是让你看清,“被虐”并不可怕,并没有你想的那么糟糕,而且充满了机会。
最糟糕的是,你认为“被虐”了将自己置于“受害者”的位置获得心理上的同情,却重不改变。
答案:
安卓系统中一共有四种启动模式,分别是standard、singleTop、singleTask和singleInstance。
每个启动模式的生命周期会在以下两个时间发生变化:
不同启动模式之间的明显区别如下:
举例说明它们的具体应用场景:
参考代码:
以下是一个使用不同启动模式的示例代码:
AndroidManifest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:launchMode="standard"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".SingleTopActivity"
android:label="@string/title_activity_single_top"
android:launchMode="singleTop"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
<activity
android:name=".SingleTaskActivity"
android:label="@string/title_activity_single_task"
android:launchMode="singleTask"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
<activity
android:name=".SingleInstanceActivity"
android:label="@string/title_activity_single_instance"
android:launchMode="singleInstance"
android:parentActivityName=".MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
</application>
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button mBtnSingleTop;
private Button mBtnSingleTask;
private Button mBtnSingleInstance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mBtnSingleTop = findViewById(R.id.btn_single_top);
mBtnSingleTask = findViewById(R.id.btn_single_task);
mBtnSingleInstance = findViewById(R.id.btn_single_instance);
mBtnSingleTop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SingleTopActivity.class);
startActivity(intent);
}
});
mBtnSingleTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SingleTaskActivity.class);
startActivity(intent);
}
});
mBtnSingleInstance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SingleInstanceActivity.class);
startActivity(intent);
}
});
}
}
SingleTopActivity.java
public class SingleTopActivity extends AppCompatActivity {
private Button mBtnSingleTop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_top);
mBtnSingleTop = findViewById(R.id.btn_single_top);
mBtnSingleTop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SingleTopActivity.this, SingleTopActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("SingleTopActivity", "onNewIntent");
}
}
SingleTaskActivity.java
public class SingleTaskActivity extends AppCompatActivity {
private Button mBtnSingleTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_task);
mBtnSingleTask = findViewById(R.id.btn_single_task);
mBtnSingleTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SingleTaskActivity.this, SingleTaskActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("SingleTaskActivity", "onNewIntent");
}
}
SingleInstanceActivity.java
public class Single