• 长按HOME键的实验【原创】


    • 实验内容:

      在不同的launch模式下,点击‘home’后,再长按Home后的activity的执行顺序是不一样的。

    实验代码:

    public class TestActivity extends Activity {
    private String TAG = "TestActivity";

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Log.d(TAG, "onCreate"+ this.toString());
    }

    @Override
    protected void onResume() {
    super.onResume();
    Log.d(TAG, "onResume"+ this.toString());
    }

    @Override
    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.d(TAG, "onNewIntent"+ this.toString());
    }

    public void a(View view) {
    startActivity(new Intent(TestActivity.this, TestActivity.class));
    }
    }
    • 不同情况下实验结果:

      1。 TestActivity的launchMode的值定义为“standard”,或者不填(默认就为standard)

    分析: 第一条线: 启动程序执行OnCreate和OnResume。

        第二条线: 点击按钮,执行a方法。 第一个TestActivity执行onPause,并启动新的TestActivity,执行OnCreate和OnResume。

        第三条线:点击‘home’键,执行OnPause。

        第四条线:长按“HOME”,执行OnResume。且activity为之前关闭的activity。

      2。 TestActivty的launchMode的值定义为“singleTop、singleTask,singleInstance”。下图为singleTask实例:

    分析: 第一条线: 启动程序执行OnCreate和OnResume。

        第二条线:点击按钮,执行a方法。 第一个TestActivity执行onPause,并启动新的TestActivity,由于设置了launchMode,在设置的当前情况下不需要重新创建新的activity。便执行onNewIntent和OnResume。

        第三条线:点击‘home’键,执行OnPause。

        第四条线:长按“HOME”,执行onNewIntent和OnResume。且activity为之前关闭的activity。    

    • 实验结论
    1。OnNewIntent方法是在创建目标Activity已经存在,无需再次创建的时候调用,代替了OnCreate方法。
    2。当activity的launchMode的模式在非standard模式下,长按HOME键,是调用onNewIntent()-》OnResume()
    PS:
            Intent intent = new Intent(TestActivity.this, TestActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    即使代码的Intent中加入了FLAG_ACTIVITY_NEW_TASK也不会影响前面的结论。 (即使加入了FLAG_ACTIVITY_NEW_TASK参数,仍然是在standard模式下调用onCreate方法。在非standard模式下,满足情况就只调用onNewIntent);
  • 相关阅读:
    用纯 javascript 提高博客访问量
    大龄程序员交流
    Git 本地仓库操作基本命令
    SoapUI登录测试(2)-- 断言
    SoapUI测试登录
    deleteMany is not a function
    jQuery contextMenu使用
    安装MongoDB -- Windows平台
    TortoiseGit 图标不显示
    C#的自定义滚动条
  • 原文地址:https://www.cnblogs.com/xitang/p/2196033.html
Copyright © 2020-2023  润新知