活动有时无法通过使用ActivityManager找到服务

时间:2013-05-20 17:55:30

标签: android service android-activity

我正在为音频流开发一个非常简单的Android应用程序。从活动I开始和停止必须管理MediaPlayer的服务,每次打开主活动时,我都会检查服务是否已经运行。 它工作正常但我有一个我无法弄清楚的问题。

当服务仍然在运行时打开应用程序时发生了一次,我的服务未找到,我无法通过使用我已实现的停止按钮来阻止它。

这是一些代码:

检查服务是否正在运行:

private boolean isMyServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (StreamingRadio.class.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

然后调用Activity onStart()时:

@Override
protected void onStart() {
    super.onStart();

    if(isMyServiceRunning()) {
        streamingIsLive=true;
        ...
        if(!isRegistered) {
            registerReceiver(onNotice, new IntentFilter("startprogress"));
            isRegistered=true;
        }
    }

}

和onStop()

@Override
protected void onStop() {
    super.onStop();
    if(isRegistered) {
        unregisterReceiver(onNotice);
        isRegistered=false;
    }

}

虽然关注我的播放和停止按钮:

public void onButtonPlay(View v) {

    if(!streamingIsLive) {
        streamingIsLive=true;
        Intent intent = new Intent(this, StreamingRadio.class);
        startService(intent);
            ....
    }
}

public void onButtonStop(View v) {

    if(streamingIsLive) {
        streamingIsLive=false;
        Intent intent = new Intent(this, StreamingRadio.class);
        stopService(intent);
            ...
    }
}

这个问题到底是什么? 谢谢

1 个答案:

答案 0 :(得分:1)

您不应该转发getRunningServices(),因为它不打算用于生产,如API docs中所述:

  

返回当前正在运行的服务列表。

     

注意:此方法仅用于调试或实现服务管理类型用户界面。

相反,您必须继续引用该服务是否在其onCreate()onDestroy()onStartCommand()onLowMemory()等内运行。