开始或绑定服务?

时间:2014-02-23 19:55:44

标签: android

哪个是音乐播放器?他们的行为有什么不同?请让我理解!我对使用什么感到困惑。我尝试使用绑定服务制作音乐播放器,但问题是每次我退出应用程序并再次输入时,似乎启动了新的serviceConnection。我期待每次回到我的应用程序时,它仍然会认识到音乐已经被激发了。例如,我有播放和暂停功能。当我播放音乐,退出应用程序,然后返回时,我会期待我可以阻止播放器。但相反,它会演奏另一种音乐。所以现在我很困惑,我真的应该使用bind吗?或者开始服务?

public class MyService extends Service{

public IBinder myBinder = new MyPlaylistBinder();
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return myBinder;
}
public class MyPlaylistBinder extends Binder{
    MyService getService(){
        return MyService.this;
    }
}

上面的代码是我的MyService.java

public ServiceConnection myConnection = new ServiceConnection(){

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        // TODO Auto-generated method stub
        MyPlaylistBinder binder = (MyPlaylistBinder) service;
        myService = binder.getService();
        Toast.makeText(getApplicationContext(), "Service is connected", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "Service is disconnected", Toast.LENGTH_SHORT).show();
    }

};

这是我的MainActivity.java的一部分

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnPrevious = (ImageButton)findViewById(R.id.btnPrevious);
    btnBackward = (ImageButton)findViewById(R.id.btnBackward);
    btnPlay = (ImageButton)findViewById(R.id.btnPlay);
    btnForward = (ImageButton)findViewById(R.id.btnForward);
    btnNext = (ImageButton)findViewById(R.id.btnNext);

    ComponentName myService = startService(new Intent(this, MyService.class));
    Intent intent = new Intent(this, MyService.class);
    bindService(intent, myConnection, Context.BIND_AUTO_CREATE);


    listview = (ListView)findViewById(R.id.listView1);
    ContentResolver resolver = getContentResolver();
    Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    cursor = resolver.query(uri, null, null, null, null);

以上是MainActivity的onCreate()的一部分 你可以看到我没有使用AIDL,因为我没有尝试过,我担心我可能会让它变得更糟。请忍受我,我只是android的初学者:(

1 个答案:

答案 0 :(得分:1)

Documentation

  

已开始

     

当应用程序组件(例如   一个activity)通过调用startService()来启动它。 一旦开始,一个   即使组件,服务也可以无限期地在后台运行   它开始被破坏。通常,一个已启动的服务执行一个   单个操作,不会将结果返回给调用者。对于   例如,它可能通过网络下载或上传文件。当。。。的时候   操作完成后,服务应该自行停止。

     

绑定

     

服务是   当应用程序组件通过调用绑定到它时“绑定”   bindService()。绑定服务提供客户端 - 服务器接口   允许组件与服务交互,发送请求,获取   结果,甚至跨进程的进程间进行   通信(IPC)。绑定服务的运行时间与其他服务一样长   应用程序组件绑定到它。 多个组件可以绑定到   服务一下子,但当所有这些服务解开时,服务就是   破坏。

基于此,您可能希望启动一项服务,因为您希望它在启动它的组件不再存在后继续运行。为了方便用户,只要服务正在运行,您就应该考虑持续通知,并包括允许用户直接暂停,恢复或完全停止播放的音乐控件(最后一个可以调用stopService,此时你取消通知)。