在活动被销毁后运行Bindservice

时间:2016-01-13 15:42:04

标签: android binding android-service android-music-player

我正在创建一个带有活页夹类型服务的音乐播放器。我知道如果我使用活页夹我应该在活动中使用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"/>

我正在用线程启动服务。

2 个答案:

答案 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复制的服务代码