5

我在 Service MessengerService 上调用 bindService。它工作正常。之后,我调用 startService。

代码与此链接远程信使服务示例部分 http://developer.android.com/reference/android/app/Service.html 完全相同,只是我在活动中添加了一个 startService

这是客户端代码: Intent intnt = new Intent(context, MessengerService.class); intnt.putExtra("msg", "从活动到服务到处理程序 11 的字符串");

    bindService(intnt, mConnection, Context.BIND_AUTO_CREATE);

    intnt.putExtra("msg", "String from activity to service to handler 22");     

    startService(intnt);

在服务代码中:在 onStartCommand 中,无论我收到的意图是在 startService 中传递的什么消息,我都会将其发送回客户端处理程序。

我在 mClients.get(0).send(msg1) 行中获取索引超出范围异常。mClients 是附加到此服务并在绑定过程中存储的客户端数组。

代码与此链接远程信使服务示例部分 http://developer.android.com/reference/android/app/Service.html 完全相同,只是我在服务中添加了一个 onStartCommand

@Override
public int onStartCommand(Intent intent, int flags, int startId){

    String str = intent.getStringExtra("msg");
    Message msg1 = Message.obtain(null, MSG_STR_VALUE);
    Bundle data = new Bundle();
    data.putString("message", str);
    msg1.setData(data);

    System.out.println(str);
    try {
        s1.acquire();
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        mClients.get(0).send(msg1);
    } catch (RemoteException e) {
        e.printStackTrace();
    }

    return START_STICKY;
}
4

2 回答 2

3

您可以在此处找到问题的答案。

服务生命周期流程图

没有特别的顺序, onStartCommand() 和 onBind() 被调用

我自己正在寻找答案,当我遇到您的问题帖子时,这令人惊讶地难以找到,所以我发布它,因为其他人可能会觉得它有用。

于 2016-11-11T08:31:59.203 回答
1

无论你运行 startService() -> bindService()还是 bindService() -> startService(),一旦startService()被调用,你需要使用stopSelf()或者stopService()停止它。

于 2019-02-09T12:54:06.493 回答