如何检测我的Android应用程序是否显示?

时间:2011-05-26 13:45:05

标签: android

我有一个Android应用程序,其服务在后台运行,可以进行各种客户端/服务器连接。如果显示我的应用程序中的任何屏幕,如何检查我的正在运行的服务?

3 个答案:

答案 0 :(得分:5)

您可以获取正在运行的进程列表,并使用以下代码检查您的进程是否在前台:

ActivityManager actMngr = (ActivityManager) getSystemService(ACTIVITY_SERVICE);

List<RunningAppProcessInfo> runningAppProcesses = actMngr.getRunningAppProcesses();
for (RunningAppProcessInfo pi : runningAppProcesses) {
    if (getPackageName().equals(pi.processName)) {

        boolean inForeground = pi.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
    }
}

点击http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html

查看详情

答案 1 :(得分:3)

Refreshing an Activity from service when Active 一些选择:

•让活动在onResume()中使用服务注册一个侦听器对象,并在onPause()中删除它

•发送私人广播,当活动位于前台时,通过registerReceiver()获取活动

•让活动为服务提供“待定结果”式PendingIntent

•使用ResultReceiver

•使用ContentProvider,活动保留来自提供者的Cursor,服务更新提供者

请参阅此处https://github.com/commonsguy/cw-advandroid/tree/master/AdvServices/以获取一些示例。

答案 2 :(得分:1)

要检查服务是否正在运行,请使用

 ActivityManager manager = (ActivityManager)  MyApp.getSharedApplication().getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (CTConstants.MyService_Name.equals(service.service.getClassName())) {
            //Your service is running
        }
    }

如果您不想将其概括为常用函数,则用

替换第一行
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);