我想执行我的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
答案 0 :(得分:1)
调用stopservice()后缓存服务。它们被称为空过程。
不包含任何活动应用程序组件的进程。该 保持这种过程活着的唯一理由是缓存 目的,在下次组件需要时改善启动时间 跑在里面。系统经常杀死这些过程以平衡 进程缓存和底层之间的整体系统资源 内核缓存。
请参阅此link并阅读有关空过程的信息。
但是,您可以使用以下方法强行终止进程:
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);