在活动被销毁后运行Bindservice

问题描述 投票:0回答:2

我正在创建一个带有活页夹类型服务的音乐播放器。我知道如果我使用活页夹我应该在活动中使用stopSelf但是有什么方法可以在活动中运行服务destroy.I我的活动中有一个搜索栏。如果我在OnDestroy中使用startService我在服务中遇到错误。

主要信息

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"/>

我正在用线程启动服务。

android binding android-service android-music-player
2个回答
2
投票

您可以从activity调用startService然后bindService。这样当活动完成时可以解除绑定但音乐服务将继续播放直到停止自我被调用。所以使用两种机制都需要停止。


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

© www.soinside.com 2019 - 2024. All rights reserved.