我正在为音频流开发一个非常简单的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);
...
}
}
这个问题到底是什么? 谢谢
答案 0 :(得分:1)
您不应该转发getRunningServices()
,因为它不打算用于生产,如API docs中所述:
返回当前正在运行的服务列表。
注意:此方法仅用于调试或实现服务管理类型用户界面。
相反,您必须继续引用该服务是否在其onCreate()
,onDestroy()
,onStartCommand()
,onLowMemory()
等内运行。