如果我在绑定后尝试使用其方法,Android应用程序就会崩溃
我在尝试制作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 =
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更新?不指定任何值。