[問題] 靜態廣播問題

作者: lihohsin (新)   2021-07-10 15:19:18
小弟一個app
一個status的欄位有 order,accepted,shiped,delivered幾種狀態
問題:
一開始app介面上顯示order
在後台server將status 改成accepted,app會立刻發出通知status已經改成accepted
但是app介面沒有跟著顯示為accepted
代碼:
app介面上
@Override
protected void onResume() {
super.onResume();
使用asyncTask 異步任務方法,去server調取status的值
顯示在介面上
}
解決辦法/遇到難題:
由於將server的status的值改為accepted之後,app有收到通知但介面沒有跟著變
必須離開這頁,重新啟動activity之後,讓asyncTask再次抓取server的status的值
介面上才會顯示出accepted
後來想到的辦法是
broadcast/receiver的方式
在獲取通知的 public void onMessageReceived(RemoteMessage remoteMessage) {
加上
Intent intent2 =new Intent();
intent2.setAction("com.xxxxx");
intent2.setPackage("com.xxxxx");
sendBroadcast(intent2,null);
加入一個廣播
}
在接收receiver中寫入
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
寫入AsyncTask方法,調取Server的status 然後修改app介面
}
}
最後呢在介面的
onResume(){
AsyncTask方法
加上MyBroadcast物件
IntentFilter filter = new IntentFilter("com.xxxxx");
MyBroadcastReceiver myBroadcastReceiver = new MyBroadcastReceiver();
registerReceiver(myBroadcastReceiver,filter);
}
還有manifest.xml 加上
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="com.xxxxx"></action>
</intent-filter>
</receiver>
結果呢,當server status 調成accepted時,app立刻收到通知
但是介面沒有跟著變更顯示為accepted
當手機進入locked狀態,解鎖之後
介面顯示就從order變成accepted
看起來broadcast有成功發送接收
但接收之後要等到手機進入休眠之後才會執行
這要怎麼解決呢?有沒有什麼好辦法

Links booklink

Contact Us: admin [ a t ] ucptt.com