繁体   English   中英

使用BroadcastReceiver进行连接更改时出现奇怪的错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM