![](/img/trans.png)
[英]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.