Android 在活动被销毁后运行Bindservice

Android 在活动被销毁后运行Bindservice,android,binding,android-service,android-music-player,Android,Binding,Android Service,Android Music Player,我正在创建一个带有活页夹类型服务的音乐播放器。我知道如果我在活动中使用活页夹,我应该在活动中使用stopSelf,但是否有任何方法可以在活动销毁时运行该服务。我的活动中有一个seekbar。如果我在OnDestroy中使用startService,我会在服务中出错 主要活动 private ServiceConnection music=new ServiceConnection(){ @Override public void onServiceConnected(Compo

我正在创建一个带有活页夹类型服务的音乐播放器。我知道如果我在活动中使用活页夹,我应该在活动中使用stopSelf,但是否有任何方法可以在活动销毁时运行该服务。我的活动中有一个seekbar。如果我在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"/>


我正在用线程启动服务

您可以启动服务,然后从活动中绑定服务。这样,当活动完成后可以解除绑定,但音乐服务将继续播放,直到调用stop self。因此,需要使用这两种机制才能停止。

您可以启动服务,然后从活动中绑定服务。这样,当活动完成后可以解除绑定,但音乐服务将继续播放,直到调用stop self。因此,使用这两种机制都需要停止。

就我所知,Servive属于创建它的线程**

因此,如果您想保持服务运行,在活动关闭后,您必须从其他位置启动它。我建议您使用一个应用程序子类,或者您可以通过以下活动执行:new Thread(){…startServiceHere…}.start()


//从@Samuh复制的服务代码,据我所知,Servive属于创建它的线程**

因此,如果您想保持服务运行,在活动关闭后,您必须从其他位置启动它。我建议您使用一个应用程序子类,或者您可以通过以下活动执行:new Thread(){…startServiceHere…}.start()



//从@Samuh复制的服务代码“我正在创建”-你能澄清一下吗?您是否正在创建音乐播放器?或者你只是在改编一些开源的东西?“我在创作”——你能澄清一下吗?您是否正在创建音乐播放器?或者你只是在修改一些开源代码?对不起,误解了你的问题。为什么要从OnDestroy启动服务?我想在活动被销毁后运行服务,但我听说如果我使用binder类型的服务。一旦使用的活动被销毁,服务就会被销毁。是的,请尝试上面的建议,当活动被销毁时,服务将继续运行。你的方法是哪一种如果是你的方法,请你解释一下。对不起,误解了你的问题。为什么要从OnDestroy启动服务?我想在活动被销毁后运行服务,但我听说如果我使用binder类型的服务。一旦使用的活动被销毁,服务就会被销毁。是的,请尝试上面的建议,当活动被销毁时,服务将继续运行。你的方法是哪一种如果这是你的方法,你能解释一下吗?谢谢。我将尝试此操作。尝试了您的代码,但如果我将我的应用程序从最近的任务中刷走,我将失败。我得到非法参数异常,服务未注册消息。您可以从清单和错误消息中添加一些代码吗?服务代码看起来怎么样?覆盖了哪些方法?编辑了问题。服务仅在UI线程中创建。将startService放在新线程中没有意义。谢谢karoly。我将尝试此操作。尝试了您的代码,但如果我将我的应用程序从最近的任务中刷走,我将失败。我得到非法参数异常,服务未注册消息。您可以从清单和错误消息中添加一些代码吗?服务代码看起来怎么样?覆盖了哪些方法?编辑了问题。服务仅在UI线程中创建。将startService放在新线程中没有意义。
Thread t = new Thread(){
public void run(){
getApplicationContext().bindService(
    new Intent(getApplicationContext(), MyAndroidUpnpServiceImpl.class),
    serviceConnection,
    Context.BIND_AUTO_CREATE
);}
};
t.start();