Android 页面跳转模式

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011619283/article/details/84147225

简介

Android 中的页面跳转与iOS中的页面跳转非常的不同。
Android中的更简单也更复杂,说其更简单是因为Android 中打开一个新的页面一般用用类似如下的代码:

Intent intent = new Intent(this, MainDetailActivity.class);
startActivity(intent);

但是,Android中可以在AndroidManifest.xml 设置每个Activity的launchMode,类似下面这样:

android:launchMode="singleTask"

当然,这个launchMode有多种类型,分别应用在不同的场景。

  • standard
  • singleTop
  • singleTask
  • singleInstance

standard 模式

如果我们没有在AndroidManifest.xml设置 launchMode,那么该Activity的launchMode默认就是standard模式,它表示新创建一个Activity,然后打开,并不会复用该Activity的任何实例。

singleTop 模式

该模式 表示 如果该Activity 的实例如果再栈顶,那么如果要打开的界面依然是该类型Activity,那么就会将intent 发送给栈顶的那个实例,复用该Activity实例,如果栈顶不是该Activity 实例,那么就创建一个新的实例对象,然后跳转。当复用时,系统会调用onNewIntent()方法,我们可以在onNewIntent()方法中重新加载数据,做数据的装载工作。

当然,我们也可以使用更简单的方式:

 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        recreate();
    }

这样,调用recreate();就会重新创建一个实例,然后从onCreate()方法开始,走生命周期方法。

singleTask 模式

该模式 表示 如果某个Activity 设置为singleTask,那么当跳转到该Activity 时,会先从栈中查找,是否已经存在该类型的实例,如果存在,那么系统会将栈中该Activity上面的Acivity全都弹出栈并销毁,然后将intent发送给之前的那个对象,同样系统也会调用onNewIntent()方法,我们可以在onNewIntent()方法中重新加载数据,做数据的装载工作。

当然,我们也可以使用更简单的方式:

 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        recreate();
    }

这样,调用recreate();就会重新创建一个实例,然后从onCreate()方法开始,走生命周期方法。

如果栈中不存在该Activity的实例,那么具就创建一个新的Activity对象,然后跳转过去即可。

singleInstance 模式

该模式 是如果某个Activity 的launchMode设置为singleInstance时,当第一次打开该Activity时,就会新建一个栈,然后将该Activity放入这个特殊的栈中,最后将这个特殊的栈压入 主栈中,当再次打开该Activity时,就会在主栈中查找该栈所在的位置,然后将其上方的所有Activity都弹出栈销毁,然后调用onNewIntent()方法。我们可以在onNewIntent()方法中重新加载数据,做数据的装载工作。

当然,我们也可以使用更简单的方式:

 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        recreate();
    }

这样,调用recreate();就会重新创建一个实例,然后从onCreate()方法开始,走生命周期方法。

猜你喜欢

转载自blog.csdn.net/u011619283/article/details/84147225
今日推荐