Android - 如果我在绑定后尝试使用其方法,应用程序崩溃

时间:2015-02-02 15:36:53

标签: android crash android-service android-service-binding

我在尝试制作Android应用时遇到了问题。我创建了一个服务供我的主Activity使用。按照我在互联网上找到的指南,我在onStart函数上进行绑定。

@Override
public void onStart() {
    super.onStart();
    //TextView textView = (TextView) findViewById(R.id.myText);
    textView.setText("Bound??????");
    if (mBound == false) {
        Intent intent = new Intent(this, com.mycompany.Messenger.LocalService.class);
        mBound = bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
        //mBound = bindService(intent, mConnection, 0);
        //startService(intent);
        if (mBound == true)
        {
            TextView textView = (TextView) findViewById(R.id.myText);
            textView.setText("Bound");
        }
        if (mBound == false)
        {
            TextView textView = (TextView) findViewById(R.id.myText);
            textView.setText("UnBound");
        }
        boolean connected = mService.CreateConnectionNetwork();


   }
}

在我推荐绑定之后,仍然在onStart函数内部,我尝试调用绑定服务的方法,如果存在与Internet的连接,则该方法会解除。但是,此时应用程序崩溃了。正如您所说,我已经添加了一个检查绑定是否成功的检查,结果是成功的,使问题更加混乱。

我已经为应用程序提供了正确的权限,如果我通过事件启动它们,服务的方法实际上是有效的,例如按下按钮。但是,有些任务我想在应用程序启动时自动完成,而不是在用户交互之后完成。有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

由于对服务工作方式的误解而出现问题。在onStart函数中进行绑定时,只需将“Intent”(如信号)发送到系统即可执行服务绑定。但是,从理论上讲,您无法保证何时完成绑定。实际上,您可以确保绑定仅在onStart函数完成其工作后才能完成,因此可以通过按钮使用服务。

如果这是第一次绑定服务并且您希望在确定服务绑定时自动执行某些操作,那么最好的位置是onServiceConnected功能。当调用所述函数时,您可以确定绑定已启动,因此在完成绑定的代码块之后(在下面的代码中的mService = binder.getService();之后),您可以添加所需的代码被执行。

    @Override
    public void onServiceConnected(ComponentName mConnection, IBinder service) {

        LocalService.LocalBinder binder = (LocalService.LocalBinder) service;
        mService = binder.getService();
        mService.CreateConnectionNetwork();
        textView.setText("I just used the service and it did not crashhh!!!");

    }