Listen to ActivityManager events?

孤街醉人 提交于 2019-11-28 06:28:21

问题


is it possible somehow to listen to the events of the ActivityManager, e.g. when activities are started? Does the ActivityManager send broadcasts? I havn't found anything indicating that it does.

What I basically need to do: I want my app to launch one of my activities whenever a certain (thirdparty) app is launched/takes focus. Problem is this needs to happen before the thirdparty app is actually displayed.

What I have tried so far as workarounds:

  1. Logcat output: I query logcat every 0.8s (filtered to show ActivityManager events only) but this eats up to many ressources
  2. getRunningTasks: Slows down the phone a lot too and is not very safe, as an activity might be running but not currently in focus

Any ideas?


回答1:


I suppose there is no actually other legacy way to handle glabal system state, only

 (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

ActivityManager.getRecentTasks() - Return a list of the tasks that are currently running, with the most recent being first and older ones after in order.

For details check docs

Perhaps though Android is a Linux you can run system tools like

Runtime.getRuntime().exec("ps -aux | grep smth")

But I think it would be hard to detect particular java application.




回答2:


I think you can use the launch mode to determine which activity to launch to top level. Please check the question: Android singleTask or singleInstance launch mode?. Maybe it will help you.




回答3:


I had a look in the android source, but there doesn't seem to be any events broadcasted.

https://android.googlesource.com/platform/packages/providers/ApplicationsProvider



来源:https://stackoverflow.com/questions/2272168/listen-to-activitymanager-events

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!