Android中ActivityLifecycleCallbacks使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中ActivityLifecycleCallbacks使用相关的知识,希望对你有一定的参考价值。

参考技术A

ActivityLifecycleCallbacks 是用来监听所有 Activity 的生命周期回调。接口定义如下:

使用场景:
1、应用新开进程假重启处理(低内存回收、修改权限)
2、管理 Activity 页面栈
3、获取当前 Activity 页面
4、判断应用前后台
5、保存恢复状态值 savedInstanceState
6、页面分析统计埋点

在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它

【中文标题】在 Android 4 中启用 android:largeHeap,在 Android 2.3 中禁用它【英文标题】:Enable android:largeHeap in Android 4, and disable it in Android 2.3 【发布时间】:2013-02-01 19:19:11 【问题描述】:

目前,我有一段代码,旨在同时在 Android 2.3 和 4+ 中运行

如果在 AndroidManifest.xml 中应用 android:largeHeap,代码的性能会好很多(大部分时间不会出现 OutOfMemory 异常)。

<application
    android:name=".MyApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:screenOrientation="nosensor"
    android:largeHeap="true"

目前,我的android:minSdkVersion 需要设置为 15 而不是 10 (Android 2.3)。如果不是,android:largeHeap 在 AndroidManifest.xml 中是不允许的。

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />

在单个 APK 中,我如何设置

如果我使用的是 Android 4+,请使用 android:largeHeap 选项 如果我使用的是 Android 2.3,请不要使用 android:largeHeap 选项

【问题讨论】:

你可以参考这个:***.com/questions/11275650/… 【参考方案1】:

您还可以在 Honeycomb 中禁用大堆并在 ICS 或 JB 中启用它。只是有点 hacky 什么的。这是我尝试过的。

在我们继续之前,将您的构建目标更改为 Honeycomb、Jelly Bean 或 ICS,以便我们可以放置 android:largeHeap 属性。此外,您可以将android:minSdkVersion 设置为API 10

Android API 10 不支持大堆。

    res文件夹中创建一个文件夹values-v14 我在values-v14 中创建了bools.xml 将此值放入bools.xml of values-v14

&lt;bool name="largeheap"&gt;true&lt;/bool&gt;

values 的布尔值 > bools.xmlvalues-[API VERSION] > bools.xml 在不同的 API 版本或默认情况下禁用大堆。

<bool name="largeheap">false</bool>

android:largeHeap 的值更改为@bool/largeheap,而不是硬编码truefalse

<application
        android:largeHeap="@bool/largeheap"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher">
                ....
</application>

我通过制作内存泄漏应用程序或仅加载一个巨大的位图来测试此代码,并且它可以正常工作!

祝你好运!

【讨论】:

别介意那些仇恨者,我会把这个添加到你的帖子中***.com/questions/5350465/…【参考方案2】:

android:largeHeap="true" 属性保留在您的AndroidManifest.xml 中。对于不支持它的版本,应该忽略它。然后,为了支持旧版本,使用 VMRuntime 类设置堆大小(如果需要,通过反射)。

有关此主题的更多信息:How to increase heap size of an android application?

【讨论】:

【参考方案3】:

    1.使用目标 Android 3.0 (API 11) 或更高版本构建项目。 (项目属性 - Android - 项目构建目标 - 选择 API 级别 11 以上)

    在Manifest文件中,修改uses-sdk值如下

对于 Android 3.0 的早期版本,您可以使用 VMRuntime 类进行内存操作。

【讨论】:

【参考方案4】:

您的 project.properties 文件中的目标 sdk 似乎不正确,请检查并将目标更改为您的 AndroidManifest 的 targetSdk (15) 并重建项目。

project.properties

# Project target.
target=15

附:我尝试将 android:largeHeap 添加到我的项目 (minSdk = 7, targetSdk = 17) 中编译并在所有 Android 版本上正常运行。

【讨论】:

【参考方案5】:

请更改项目属性:

在项目属性 -> Android -> 项目构建目标 -> Google API,API 级别 19(或您需要的任何其他):)

因此您可以保留您的最低 SDK 选项而无需更改,例如 8 :)

【讨论】:

以上是关于Android中ActivityLifecycleCallbacks使用的主要内容,如果未能解决你的问题,请参考以下文章

01-Activity生命周期及启动模式

Activity的生命周期

登录/重试失败时的 Google Play 游戏服务怪异(活动生命周期)

活动生命周期。当应用程序已经打开(折叠)正在关闭并在图标单击时重新启动?

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )