Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VA中最近应用列表中删除VA应用后,VA无法再次启动该应用 #10

Open
prife opened this issue Sep 1, 2016 · 1 comment

Comments

@prife
Copy link
Owner

prife commented Sep 1, 2016

bug描述:
VA中打开一个应用,然后在最近列表中移除它,再在va中重复打开它,就启动不了了。

目前分析的结果是这样:
最近应用列表移除会调用到AMS的removeTask,并且在里面执行kill进程。但是VA里面启动的进程被移除时,不会被AMS kill掉,这个在removeTask里走了特殊的path,Task相关数据结构被删除了。对比平行空间,通用启动的应用也没有被kill掉。因此 VAMS里的linkToDeath不会生效,ActivityStack.processDied不会被调用。
这个过程VA主进程没有得到通知,VA里再去通过 ActivityManager.moveTaskToFront启动应用是起不来的。AMS里相关数据结构没了。

VA当前缺失了对这种情况处理的代码。

一个思路:利用这个API ActivityManager.getRecentTasks ,VA里 每次luanch intent时,对去比较一下当前系统中存在的Task和VA内部维护的Task列表,如果找到,继续用VA ActivityStack里每次moveTaskFromFront逻辑。找不到说明出现了Task被干掉的情况,但是这时候如何启动client我就没啥思路了。

平行空间里也是利用了这个 getRecentTasks API。

测试代码: prife/VirtualApp@6d568ac

@prife
Copy link
Owner Author

prife commented Sep 1, 2016

思路:VA首次启动应用时,会利用StubProvider来创建一个新桩进程。对于bug描述中的这种情况,不需要重新创建进程,也就省掉了fetchFreeStub的操作。只需走后续的startActivity流程。
修复:prife/VirtualApp@0802d20
测试:达到预期效果

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant