簡體   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