我的IntentService
看起来像这样:
public class MusicService extends IntentService{
final static String NAME = "MusicService";
//------------------------------------------------------------------------------
public MusicService(String name) {
super(NAME);
}
//------------------------------------------------------------------------------
public MusicService() {
super(NAME);
}
//------------------------------------------------------------------------------
@Override
protected void onHandleIntent(Intent intent) {
// Toast never comes up
Toast.makeText(getApplicationContext(), NAME, Toast.LENGTH_SHORT).show();
PodcastrApplication.newInstance().getMediaPlayer().start();
}
//------------------------------------------------------------------------------
}
我有MediaPlayer
我保留在Application
中以减少对象实例化。这个想法是,一旦应用程序失焦,媒体播放器将播放。但是,服务永远不会被解雇。
以下是我从onStop()
Fragment
拨打该服务的方式
showMediaPlayerNotification();
Intent music = new Intent(getActivity(), MusicService.class);
getActivity().startService(music);
我也在清单中宣布了它。 logcat也没有错误。
发生了什么事?
更新1:
调用startService()后,IntentService会完成定义的工作 在其onHandleIntent()方法中,然后自行停止。
服务是否正在停止,因为它只是一行执行? 我应该将媒体播放器移动到线程吗?
更新2:
<service
android:name=".service.MusicService"
android:enabled="true"
android:exported="false" />
答案 0 :(得分:1)
您已在后台线程中调用Toast.makeText()
!任何UI内容都必须在UI线程中完成。
请注意:IntentService
使用后台线程但Service
使用UI线程
您可以尝试:
public class MusicService extends IntentService{
Handler mHandler;
final static String NAME = "MusicService";
//------------------------------------------------------------------------------
public MusicService(String name) {
super(NAME);
mHandler = new Handler();
}
//------------------------------------------------------------------------------
public MusicService() {
super(NAME);
mHandler = new Handler();
}
//------------------------------------------------------------------------------
@Override
protected void onHandleIntent(Intent intent) {
mHandler.post(new Runnable{
@Override
public void run(){
Toast.makeText(getApplicationContext(), NAME, Toast.LENGTH_SHORT).show();
}
});
// Toast never comes up
PodcastrApplication.newInstance().getMediaPlayer().start();
}
//------------------------------------------------------------------------------
}