[英]BroadcastReceiver crashes Android application when connection state changes
[英]Weird bug when using BroadcastReceiver for connection changes
我在其中一个应用程序中实现了Volley库! 我有一个数据加载按钮,当我单击它时,它会检查时间戳记,然后相应地下载数据,如果有新数据或通知用户他已经拥有最新数据。
虽然我还想为连接性更改实现一个接收器,以便下载数据或更新它们,但是在应用程序启动时。 一切正常,直到到达时间戳值的StringRequest为止。
在这一点上,确实发生了一些奇怪的事情。 尽管请求以正确的时间戳返回,但代码首先执行时间戳的get方法,然后执行set方法,该方法使timestamp变量为null。 仅当数据检查由BroadcastReceiver触发时才会发生。
手动触发后,一切都会好起来...
CheckTimestamp方法
private void checkTimestamp(){
mTimestampRequest = new StringRequest(DatabaseSharer.TIMESTAMP_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(Menu.class.getSimpleName(), "Responsed back -- " + response);
setmTimeStamp(response);
}
},new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}
);
mRequestQueue.add(mTimestampRequest);
}
方法调用顺序
checkTimestamp();
Log.d(Menu.class.getSimpleName(),"dataStaff-1st else entered");
String lastTimestamp = shared.getString("time", "none");
final String temp = getmTimeStamp();
Log.d(Menu.class.getSimpleName(), "temp= " + temp + " -- lasttimestamp = " + lastTimestamp);
接收器Logcat(请参阅get为null并在设置之前执行)
Logcat手动触发时(get之前也已执行但响应正确)
我没有主意,所以如果有人可以帮助我,我将很感激!
BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效。 一旦您的代码从该函数返回,系统将认为该对象已完成并且不再处于活动状态。
这对您在onReceive(Context,Intent)实现中可以执行的操作具有重要影响:要求异步操作的任何内容都不可用,因为您需要从函数中返回以处理异步操作,但是到那时,BroadcastReceiver是不再活动,因此系统可以在异步操作完成之前终止其进程。
特别是,您可能不会显示对话框或从BroadcastReceiver内部绑定到服务。 对于前者,您应该改用NotificationManager API。 对于后者,可以使用Context.startService()将命令发送到服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.