-1

我在尝试制作 Android 应用程序时遇到了问题。我创建了一个服务供我的主要活动使用。按照我在互联网上找到的指南,我对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 的连接。但是,此时应用程序崩溃。正如您所注意到的,我添加了对绑定是否成功的检查,结果是成功的,这使事情变得更加混乱。

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

4

1 回答 1

-1

问题的出现是由于对服务工作方式的误解。当您在onStart函数内部进行绑定时,您只需将“意图”(如信号)发送到系统以执行服务绑定。但是,理论上您无法保证绑定何时完成。在实践中,您可以确定只有在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!!!");

    }
于 2015-02-02T15:36:53.130 回答