Android 使用BroadcastReceiver更改连接时出现奇怪的错误
我在我的一个应用程序中实现了截击库!我有一个数据加载按钮,当我点击它时,它会检查时间戳,然后相应地下载数据,如果有新的数据,或者通知用户他已经有了可用的最新数据 虽然我还想实现一个连接更改接收器,以便在应用程序启动时下载或更新数据。在达到StringRequest的时间戳值之前,一切都会正常进行 在这一点上,一些非常奇怪的事情发生了。尽管请求返回正确的时间戳,但代码首先执行时间戳的get方法,然后执行set方法,该方法使时间戳变量为null。只有当广播接收器触发数据检查时,才会发生这种情况 当手动触发时,一切正常 检查时间戳方法Android 使用BroadcastReceiver更改连接时出现奇怪的错误,android,broadcastreceiver,android-volley,Android,Broadcastreceiver,Android Volley,我在我的一个应用程序中实现了截击库!我有一个数据加载按钮,当我点击它时,它会检查时间戳,然后相应地下载数据,如果有新的数据,或者通知用户他已经有了可用的最新数据 虽然我还想实现一个连接更改接收器,以便在应用程序启动时下载或更新数据。在达到StringRequest的时间戳值之前,一切都会正常进行 在这一点上,一些非常奇怪的事情发生了。尽管请求返回正确的时间戳,但代码首先执行时间戳的get方法,然后执行set方法,该方法使时间戳变量为null。只有当广播接收器触发数据检查时,才会发生这种情况 当手
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);
}
Receiver Logcat(查看get是否为null并在集合之前执行)
手动触发时的Logcat(get也在之前执行,但响应正确)
我没有主意了,所以如果有人能帮助我,我将不胜感激 接收机生命周期
BroadcastReceiver对象仅在onReceive调用期间有效(上下文、意图)。一旦代码从此函数返回,系统将认为对象已完成且不再处于活动状态
这对onReceive(Context,Intent)实现中的操作有重要影响:任何需要异步操作的操作都不可用,因为您需要从函数返回来处理异步操作,但此时BroadcastReceiver不再处于活动状态,因此系统可以在异步操作完成之前终止其进程
特别是,您可能无法从BroadcastReceiver中显示对话框或绑定到服务。对于前者,您应该改用NotificationManager API。对于后者,可以使用Context.startService()向服务发送命令 你能解释一下吗?我刚刚编辑了我的答案。你可以看看。我从android开发者网站上选的。是的。谢谢你,我也看到了。唯一的办法就是启动一个服务来处理这个任务?或者还有其他解决方法吗?asynctask应该在接收方的onReceive方法中注册,或者只从onReceive方法调用它?Ⅹκmate!非常感谢你的帮助!
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);