• activity--常见属性总结


    15.Activit的几个重要属性总结?

    12.onNewIntent()使用Tips?
    11.launchMode的属性介绍?及其常用的Intent Flag?

    ====

    15.Activit的几个重要属性总结?
    1.Activity的affinity(亲和力)
    2.Intent几种常见的flags
    3.<activity>与task相关属性

    launchMode:
    taskAffinity:
    Activity的task相关属性?
    allowTaskReparenting:
    alwaysRetainTaskState:
    clearTaskOnLaunch:
    finishOnTaskLaunch:
    documentLaunchMode:


    12.onNewIntent()使用Tips?

    1. 方法体中需手动调用setIntent(intent),否则之后的getIntent()获取的都是旧的intent对象;
    2. 被onNewIntent方式打开的activity,对生命周期的影响.
    1. 之前activity是resume状态,onNewIntent()后只会调用onResume()方法
    2. 否则按照 `onNewIntent->onRestart->onStart->onResume->.


    在IntentActivity中重写下列方法:onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent
    1、其他应用发Intent,执行下列方法:
    onCreate
    onStart
    onResume

    2、接收Intent声明:

    <activity android:name=".IntentActivity" android:launchMode="singleTask"
      android:label="@string/testname">
      <intent-filter>
      <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="philn"/>
      </intent-filter>
    </activity>

    3、如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop状态的话,其他应用再发送Intent的话,执行顺序为:
    onNewIntent,onRestart,onStart,onResume。

    在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题。

    首先,在默认情况下,当您通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,如下所示:

    <activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1"></activity>
    launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:

    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);//must store the new intent unless getIntent() will return the old one
    processExtraData();
    }

    不要忘记,系统可能会随时杀掉后台运行的 Activity ,如果这一切发生,那么系统就会调用 onCreate 方法,而不调用 onNewIntent 方法,一个好的解决方法就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法,如下所示:

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    processExtraData();
    }
    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    processExtraData()
    }
    private void processExtraData(){
    Intent intent = getIntent();
    //use the data received here
    }

    二、onNewIntent()的setIntent()和getIntent()
    @Override
    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // setIntent(intent);
    int data = getIntent().getIntExtra("HAHA", 0);
    // int data = intent.getIntExtra("HAHA", 0);
    }

    如果没有调用setIntent(intent),则getIntent()获取的数据将不是你所期望的。但是使用intent.getInXxx,貌似可以获得正确的结果。

    注意这句话:
    Note that getIntent() still returns the original Intent. You can use setIntent(Intent) to update it to this new Intent.
    所以最好是调用setIntent(intent),这样在使用getIntent()的时候就不会有问题了。


    11.launchMode的属性介绍?及其常用的Intent Flag?


    什么是Activity的启动模式(LaunchMode)
    启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置
    启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;这四种模式影响了Activity所在的任务栈.

     Intent.setFlag(int flags)方法传递的一个整形的数据,被Android系统设置为了常量:
    FLAG_ACTIVITY_NEW_TASK:这个标识会使新启动的Activity独立创建一个Task。
    FLAG_ACTIVITY_CLEAR_TOP:这个标识会使新启动的Activity检查是否存在于Task中,如果存在则清除其之上的Activity,使它获得焦点,并不重新实例化一个Activity,一般结合FLAG_ACTIVITY_NEW_TASK一起使用。
    FLAG_ACTIVITY_SINGLE_TOP:等同于在LauncherMode属性设置为singleTop。

  • 相关阅读:
    好听的歌 好音乐
    dubbox编译
    [HDU3038]How Many Answers Are Wrong(并查集)
    [POJ1733]Parity game(并查集 + 离散化)
    [POJ1703]Find them, Catch them(并查集)
    [luoguP2024] 食物链(并查集)
    [luoguP3355] 骑士共存问题(二分图最大独立集)
    火星探险问题
    [CODEVS1917] 深海机器人问题(最小费用最大流)
    [CODEVS1916] 负载平衡问题(最小费用最大流)
  • 原文地址:https://www.cnblogs.com/awkflf11/p/9734642.html
Copyright © 2020-2023  润新知