android监听应用程序启动
Posted
技术标签:
【中文标题】android监听应用程序启动【英文标题】:android listen for app launch 【发布时间】:2011-11-27 15:08:17 【问题描述】:我需要开发一个服务来监听每个活动的开始。 我必须这样做吗?
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfo.size(); i++)
Log.v("Proc: ", runningAppProcessInfo.get(i).processName);
我需要每 X 秒执行一次吗?会影响电池消耗吗?
【问题讨论】:
附加信息:ActivityManager.getRunningTasks(1) 将返回正在运行的任务列表中的第一个任务。这项任务似乎总是在前台。 【参考方案1】:据我所知,目前没有办法监听应用程序的启动,除非它是第一次启动。 ACTION_PACKAGE_FIRST_LAUNCH(广播操作:在应用程序首次启动时(即第一次从停止状态移出)发送到应用程序的安装程序包。
所以我想你的解决方案是目前最好的解决方案。
【讨论】:
【参考方案2】:据我所知,IActivityController.Stub
包中有一个类 IActivityController.Stub
。
但这是一个@hide
接口(有人说有一些方法可以访问@hide
api)。
我们可以像这样设置一个 Listener 来监听 Activity 开关:
mAm = ActivityManagerNative.getDefault();
try
mAm.setActivityController(new ActivityController());
catch (RemoteException e)
System.err.println("** Failed talking with activity manager!");
ActivityManagerNative 类也是@hide。 ActivityController 是一个扩展 IActivityController.Stub 的类。
如何访问@hide Api:
-
您可以获取android源代码来构建一个have-@hide-api Android.jar来使用。
通过反思。
【讨论】:
关于这一点的注意事项:在现代版本的 Android 上,调用setActivityController
需要 SET_ACTIVITY_WATCHER
权限,这要求您的应用程序使用用于签署 Android 框架的密钥进行签名,这不是如果您正在开发旨在在所有 ROM 上运行的第三方应用程序,这真的是可能的。以上是关于android监听应用程序启动的主要内容,如果未能解决你的问题,请参考以下文章
Android性能优化--冷启动优化(Application)
带有 apollo 的 android mqtt-client-1.5 监听器