资讯专栏INFORMATION COLUMN

2.安卓基础之Activity启动方式

antyiwei / 971人阅读

摘要:零前言默认的启动模式启动一个,该就会在返回栈中入栈该处于栈顶的位置每次启动都会创建该的新实例在启动活动时若栈顶已经是该,则认为可以直接使用它整个应用程序的上下文中只存在一个实例两次相同实例之间的会被杀死

零、前言
standard:默认的启动模式
    |---启动一个Activity,该Activity就会在返回栈中入栈
    |---该Activity处于栈顶的位置
    |---每次启动都会创建该Activity的新实例
    
singleTop:
    |---在启动活动时若栈顶已经是该Activity,则认为可以直接使用它
    
singleTask:
    |---整个应用程序的上下文中只存在一个实例
    |---两次相同实例之间的Activity会被杀死

singleInstance:
    |---启用一个新的返回栈来管理这个活动
一、测试类
Activity1
public class Activity1 extends AppCompatActivity {

    @BindView(R.id.btn_start_self)
    Button mBtnStartSelf;
    @BindView(R.id.button_start_others)
    Button mButtonStartOthers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac_task);
        ButterKnife.bind(this);
        Log.e("TASK_ID", "Activity1 Task id is " + getTaskId());
    }

    @OnClick({R.id.btn_start_self, R.id.button_start_others})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_start_self:
                startActivity(new Intent(Activity1.this, Activity1.class));
                break;
            case R.id.button_start_others:
                startActivity(new Intent(Activity1.this, Activity2.class));
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("TASK_ID", "Activity1 销毁");
    }
}
Activity2
public class Activity2 extends AppCompatActivity {

    @BindView(R.id.btn_start_self)
    Button mBtnStartSelf;
    @BindView(R.id.button_start_others)
    Button mButtonStartOthers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ac_task);
        ButterKnife.bind(this);

        Log.e("TASK_ID", "Activity2 Task id is " + getTaskId());
    }

    @OnClick({R.id.btn_start_self, R.id.button_start_others})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_start_self:
                startActivity(new Intent(Activity2.this, Activity2.class));
                break;
            case R.id.button_start_others:
                startActivity(new Intent(Activity2.this, Activity1.class));
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("TASK_ID", "Activity2 销毁");
    }
}
布局:ac_task.xml



    

三、测试结果分析:
1:standard模式:Activity1、2皆为standard

依次打开Activity1、2、2、1、2
 E/TASK_ID: Activity1 Task id is 89
 E/TASK_ID: Activity2 Task id is 89
 E/TASK_ID: Activity2 Task id is 89
 E/TASK_ID: Activity1 Task id is 89
 E/TASK_ID: Activity2 Task id is 89
依次返回
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity1 销毁
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity1 销毁
:2:singleTop模式:Activity1为standard, Activity2 为singleTop

依次打开Activity1、2、2、1、2
E/TASK_ID: Activity1 Task id is 82
E/TASK_ID: Activity2 Task id is 82
E/TASK_ID: Activity1 Task id is 82
E/TASK_ID: Activity1 Task id is 82
依次返回
E/TASK_ID: Activity1 销毁
E/TASK_ID: Activity1 销毁
E/TASK_ID: Activity2 销毁
E/TASK_ID: Activity1 销毁
可见第二次打开Activity2时并无变化,因为singleTop模式,第二次的Activity2并没有创建


:3:singleTask模式:Activity1为standard, Activity2 为singleTask

依次打开Activity1、2、2、1、2
E/TASK_ID: Activity1 Task id is 94
E/TASK_ID: Activity2 Task id is 94
E/TASK_ID: Activity1 Task id is 94
E/TASK_ID: Activity1 销毁
依次返回
E/TASK_ID: Activity2 销毁
E/TASK_ID: Activity1 销毁
可见第二次打开Activity2时并无变化,第三次打开Activity2,Activity1销毁
:4:singleInstance模式:Activity1为standard, Activity2 singleInstance

依次打开Activity1、2、2、1、2
 E/TASK_ID: Activity1 Task id is 115
 E/TASK_ID: Activity2 Task id is 116
 E/TASK_ID: Activity1 Task id is 115
依次返回
 E/TASK_ID: Activity2 销毁
 E/TASK_ID: Activity1 销毁
 E/TASK_ID: Activity1 销毁
可见Activity2多带带在一个栈中,多次开启Activity2不会新建实例


后记、
1.声明:
1.本文由张风捷特烈原创,转载请注明  
2.欢迎广大编程爱好者共同交流
3.个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
4.看到这里,感谢你的喜欢与支持
2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
张风捷特烈个人网站:http://www.toly1994.com

3.联系我
QQ:1981462002   
邮箱:1981462002@qq.com
微信:zdl1994328

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14422.html

相关文章

  • 安卓开发app在后台运行时页面数据被系统清除后操作重启APP

    摘要:当运行内存被其它应用占用完时,在进入时,时的当前页面数据没有被清除待进一步确认,此时页面正常,点击返回键之后显示的页面数据被清除了,而导致应用崩溃。每次界面数据被清理掉之后,再显示到前台时,都会重新走生命周期。在安卓开发过程中,当点击HOME键,将app运行在后台时,然后再点击app图标进入时,遇到了如下两种情况: 1、每次打开时,app的入口页面总是被执行。 2、当运行内存被其它应用占用完...

    legendmohe 评论0 收藏0
  • 1.安卓基础Activity生命周期

    摘要:测试生命周期的是一个普通的是对话框型的一第一次创建时调用可见的时候调用位于栈顶,获取焦点时调用移除栈顶,失去焦点时调用由停止状态变为运行状态之前调用不可见的时候调用销毁的时候调用跳转到跳转到二生命周期测试结果打开跳转普通从跳转的返回跳转到对 1.ActivityLifeCycle:测试生命周期的Activity 2.CommonActivity是一个普通的Activity 3.Di...

    Meathill 评论0 收藏0
  • 4.安卓基础Activity跳转动画

    摘要:零前言打开点击屏幕进入,此时左移出,左移入点击返回按钮右移出,右移入默认跳转模式本案例效果一测试类红色蓝色二动画左移出左移出左移入左移入右移出右移出右移入右移入附录布局文件三利用样式来改变跳转 零、前言 1.打开RedActivity点击屏幕进入BlueActivity,此时RedActivity左移出,BlueActivity左移入 2.点击返回按钮BlueActivity右移出,...

    starsfun 评论0 收藏0
  • 安卓基础通过Intent跳转Activity

    摘要:通过跳转一通过意图开启的方式隐式意图通过指定一组数据或者动作实现或者具体根据清单文件配置显示意图通过指定具体的实现两种意图的区别显示意图用于开启自己应用内的隐式意图用于开启其他应用的主要是系统应用相比显示意图安全性较差二实现逻辑通过由跳转至通过Intent跳转Activity   一.通过意图开启Activity的方式:   隐式意图:通过指定一组数据或者动作实现 Intent inten...

    cooxer 评论0 收藏0
  • 3.安卓基础Activity间的数据传递

    摘要:零前言打开,通过按钮以返回结果方式打开,同时在中加入数据在的方法中使用数据填充到上。按返回按钮,将数据传递给,在方法中验证返回结果并将数据填充到上。 零、前言 打开FromActivity,通过按钮以返回结果方式打开ToActivity,同时在intent中加入数据, 在ToActivity的onCreate方法中使用数据填充到TextView上。 按返回按钮,将ToActivit...

    BigTomato 评论0 收藏0

发表评论

0条评论

antyiwei

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<