在活动被销毁后运行Bindservice

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在活动被销毁后运行Bindservice相关的知识,希望对你有一定的参考价值。

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

我正在用线程启动服务。

答案

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

另一答案

好吧,据我所知,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复制的服务代码

以上是关于在活动被销毁后运行Bindservice的主要内容,如果未能解决你的问题,请参考以下文章

用bind的方法启动service,调用者退出后,service也销毁?

活动在片段上出现的权限对话框中被破坏

如何在销毁活动之前在视图寻呼机内的片段中执行某些操作

Android:使用支持片段管理器时复制片段

活动被销毁后,savedInstanceState 始终为空

当活动被破坏但我必须继续执行片段中的代码时该怎么办?