Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我在绑定后尝试使用其方法,Android应用程序就会崩溃_Android_Crash_Android Service_Android Service Binding - Fatal编程技术网

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

如果我在绑定后尝试使用其方法,Android应用程序就会崩溃,android,crash,android-service,android-service-binding,Android,Crash,Android Service,Android Service Binding,我在尝试制作Android应用程序时遇到了一个问题。我已经创建了一个供我的主要活动使用的服务。按照我在互联网上找到的指南,我在onStart功能上进行绑定 @Override public void onStart() { super.onStart(); //TextView textView = (TextView) findViewById(R.id.myText); textView.setText("Bound??????"); if (mBound =

我在尝试制作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的连接。然而,在这一点上,应用程序崩溃了。正如您所注意到的,我已经添加了一个绑定是否成功的检查,结果是成功的,这使得问题更加混乱


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

问题是由于对服务工作方式的误解造成的。在
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!!!");

    }

例外情况是什么?我只是把我的搜索变成了一个问题,如果我看到了,我会立即理解为什么我的应用程序会崩溃——我花了几个小时才找到一条暗示某个随机问题答案的评论。我只是不明白为什么绑定后服务的功能不能工作——即使是最简单的调用,在活动中没有任何值分配,也没有人谈论服务绑定的异步行为。如果你认为这个问题不好,没关系,但是如果过去的我在搜索时踩到了这个QA,这会节省我的时间。我是一个Android初学者,这个QA也是为其他可能面临同样问题的初学者准备的。“我花了好几个小时才找到一条暗示某个随机stackoverflow问题答案的评论。”——然后对问题和评论进行投票,并提出修改建议,使其更容易找到。如果您已经阅读了服务文档,您就不会尝试上面的代码。到时候您将尝试查找它。真正的问题是您实际上是在尝试从
服务
更新UI。服务将通知UI(
活动
)它需要进行的任何更改,即通过广播或本地广播。您的意思是仅仅调用该函数将导致UI更新?不指定任何值。