我正在创建一个带有活页夹类型服务的音乐播放器。我知道如果我使用活页夹我应该在活动中使用stopSelf但是有什么方法可以在活动destroy上运行服务。我的活动中有一个搜索栏。如果我在OnDestroy中使用startService,我在服务中遇到错误。
MainActivity
private ServiceConnection music=new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName p1, IBinder p2)
{
// TODO: Implement this method
MusicBinder binder=(MusicBinder)p2;
registerReceiver(broadcastReciever, new IntentFilter(MusicService.BROADCAST_ACTION));
musicSrv = binder.getService();
musicSrv.setList(songList);
musicBound = true;
}
@Override
public void onServiceDisconnected(ComponentName p1)
{
// TODO: Implement this method
if (mBroadCastIsRegistered)
{
try
{
unregisterReceiver(broadcastReciever);
mBroadCastIsRegistered = false;}
catch (Exception e)
{
e.printStackTrace();
Toast.makeText(getApplicationContext(), e.getClass().getName() + "" + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
musicBound = false;
}
};
清单
<service
android:name=".Musicservice"/>
我正在用线程启动服务。
答案 0 :(得分:2)
您可以从activity启动Service,然后执行bindService。这样,当活动完成后可以解除绑定,但音乐服务将继续播放,直到停止自我被调用。因此,需要使用两种机制来停止。
答案 1 :(得分:0)
嗯,据我所知,Servive属于线程,它已经创建了**。
因此,如果您希望保持服务正常运行,则在“活动”关闭后,您必须从其他位置启动它。我推荐一个Application子类,或者你可以从一个Activity中创建它:new Thread(){... startServiceHere ...}。start();
Thread t = new Thread(){
public void run(){
getApplicationContext().bindService(
new Intent(getApplicationContext(), MyAndroidUpnpServiceImpl.class),
serviceConnection,
Context.BIND_AUTO_CREATE
);}
};
t.start();
//从@Samuh复制的服务代码