调用onDestroy()后,Android服务仍驻留在RAM中

时间:2018-04-04 08:00:43

标签: android ram ondestroy bindservice

我想执行我的android包的内存测试。

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

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

之后,另一个包(包1)将bindService调用到我的包中,包终结。然后我的包的日志如下。

export class TodoService {

  private _todos: BehaviorSubject<Todo[]>;

  constructor(private reloaderService: DataReloaderService, private http: HttpClient) {
    this._todos = this.reloaderService.reloader.mergeMap(() => this.http.get(dataUrl));
  }

  public get todos(): Observable<Todo[]>{
    return this._todos;
  }

  addResourceRequirement(todo: ToDo, resource: Resource) {
    this.http.post(`${url}/${todo.id}/`, {addResource: resource.id})
      .subscribe(() => this.reloader.reload());
  }
}

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

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

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

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

3小时后,当我输入&b; adb sehll dumpsys activity oom |时grep我的包裹名称&#39;要检查内存状态,它会显示此行。

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

虽然我的软件包处于缓存状态,但它仍然会持续存在于RAM中。 即使我插入代码&#34; stopService或stopSelf&#34;在onDestroy,它具有相同的状态!

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

对这种情况有任何意见或评论吗?

此致 洛根。

我的软件包的源代码如下。

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

1 个答案:

答案 0 :(得分:1)

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

  

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

请参阅此link并阅读有关空过程的信息。

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

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