1

我想对我的 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 中,我的 packagee(被调用者)仍然持续驻留在 RAM 中。

3小时后,当我进入'adb sehll dumpsys activity oom | grep my package name' 来检查内存状态,它显示了这一行。

过程#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){
    }
}
4

1 回答 1

1

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

不包含任何活动应用程序组件的进程。保持这种进程处于活动状态的唯一原因是出于缓存目的,以缩短组件下次需要在其中运行时的启动时间。系统通常会杀死这些进程,以平衡进程缓存和底层内核缓存之间的整体系统资源。

请参阅此链接并阅读有关空进程的信息。

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

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
于 2018-04-04T08:16:05.477 回答