【问题标题】:Android service still resides in RAM after onDestroy() is called调用 onDestroy() 后,Android 服务仍驻留在 RAM 中
【发布时间】:2018-04-04 08:00:43
【问题描述】:

我想对我的 android 包进行内存测试。

在我的包中,只有一个非常简单的服务。

该服务仅由另一个包中的 bindService 启动。 (不是启动服务)

之后,另一个包(包 1)向我的包调用 bindService,包终止。那么我的包的日志如下。

04-04 16:13:06.962 5468-5468/memorytestapp I/: @onCreate

04-04 16:13:06.966 5468-5468/memorytestapp I/: @onBind

04-04 16:13:12.221 5468-5468/memorytestapp I/: @onUnbind
04-04 16:13:12.258 5468-5468/memorytestapp I/: @onDestroy

调用 onDestroy 后,我希望我的包在一定时间后不会驻留在 RAM 中。

然而,即使包 1(调用者)在终止后没有立即驻留在 RAM 中,我的被调用者(被调用者)仍然持续驻留在 RAM 中。

3 小时后,当我进入 'adb sehll dumpsys 活动 oom | grep my package name' 查看内存状态,显示这一行。

Proc #5: cch B/ /CEM trm: 0 5468:memorytestapp/u0a227 (cch-empty)

虽然我的包处于缓存状态,但它仍然持续驻留在 RAM 中。 即使我在 onDestroy 插入代码“stopService 或 stopSelf”,它也有相同的状态!

我真的希望我的包在调用 onDestroy 后不驻留在 RAM 中。

对这种情况有什么意见或意见吗??

真诚地, 洛根。

我的包源代码如下。

public class TestService extends Service {

    @Override
    public void onCreate(){
        super.onCreate();
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public boolean onUnbind(Intent intent) {
        return true;
    }

    @Override
    public void onRebind(Intent arg0){
    }
}

【问题讨论】:

    标签: android ram ondestroy bindservice


    【解决方案1】:

    服务在调用 stopservice() 后被缓存。它们被称为空进程。

    不包含任何活动应用程序组件的进程。这 保持这种进程存活的唯一原因是缓存 目的,以提高组件下次需要启动时的启动时间 在里面跑。系统经常会杀死这些进程以平衡 进程缓存和底层之间的整体系统资源 内核缓存。

    查看此link 并阅读有关空进程的信息。

    但是,您可以使用以下命令强行终止进程:

    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);
    

    【讨论】:

    • 哦,谢谢您的回复!在我的测试用例中,我只看到一次我的包在 RAM 中消失了。在这种情况下,日志如下。杀死 19191:“我的包名”:1800 年代为空。许多其他软件包也随此日志消失。从这个日志中,我注意到通常在缓存 1800s 后,包会在 RAM 中消失。但是,我的包通常驻留在 RAM 中。 (仅一种情况除外)根据您的评论,这是因为在我的情况下不需要资源平衡。这样对吗?提前致谢。 :-)
    • Android 根据进程中当前处于活动状态的组件的重要性,将进程排在它所能达到的最高级别。例如,如果一个进程托管一个服务和一个可见活动,则该进程被列为可见进程,而不是服务进程。
    猜你喜欢
    • 1970-01-01
    • 2011-11-06
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多