sa接入信令流程,廣播中等待較久出現anr問題

 2023-11-22 阅读 19 评论 0

摘要:需要實現一個開機時刻啟動升級服務的功能,但是接受的廣播為android的"android.intent.action.BOOT_COMPLETED",接收到廣播后,系統的網絡并不一定就緒,在網絡不通的情況下可能導致本次升級服務啟動不了。 解決方法是,在接收到廣播之

需要實現一個開機時刻啟動升級服務的功能,但是接受的廣播為android的"android.intent.action.BOOT_COMPLETED",接收到廣播后,系統的網絡并不一定就緒,在網絡不通的情況下可能導致本次升級服務啟動不了。

解決方法是,在接收到廣播之后查詢網絡狀況,如果網絡通暢,則啟動升級服務,否則等待150s,直到網絡通暢再啟動升級。

?

該方法成功的解決了收到開機廣播和網絡就緒不同步問題,保證升級服務在有線連接和wifi連接情況下都能夠順利啟動。

sa接入信令流程、?

需要注意的一點是,等待操作不能直接加入到廣播接受的reveiver函數中,這樣,如果等待時間較久,一般超過十秒鐘,會報anr錯誤。

E/ActivityManager( 2029): ANR in com.tcl.mtk.mtkVersionUpdate
E/ActivityManager( 2029): PID: 2810
E/ActivityManager( 2029): Reason: Broadcast of Intent { act=android.intent.action.BOOT_COMPLETED flg=0x18000010 cmp=com.tcl.mtk.mtkVersionUpdate/.broadcastManage.BroadCastManger (has extras) }
E/ActivityManager( 2029): Load: 4.17 / 0.97 / 0.32

?

代碼實現片段:

anr問題,?

@Override
public void onReceive(Context context, Intent intent) {

mContext = context;
String action = intent.getAction();
if (action.equals(BroadCastType.systemBootFinished)) { // 系統啟動完成,首先判斷自動升級是否已經開啟,如果自動升級已經開啟,則需要啟動自動升級;
System.out.println("received systemBootFinished broadcast:"
+ BroadCastType.standServiceFinished);

new AutoNetworkUpdateThread().start();

}
}

class AutoNetworkUpdateThread extends Thread {

public void run() {
Log.i(TAG, "AutoNetworkUpdateThread in");

boolean isNetworkAlive = isNetworkAvailable(mContext);

if (isNetworkAlive) {
Log.i(TAG, "isNetworkAlive = " + isNetworkAlive);
standardServiceFinished(mContext);
} else {

//實現連接不上則嘗試五十次連接功能
int attemptTime = 0;
while (attemptTime < maxConnectTime) {
Log.d(TAG,"attemptStrTime = " + attemptTime);
isNetworkAlive = isNetworkAvailable(mContext);
Log.i(TAG, "isNetworkAlive = " + isNetworkAlive);
if (isNetworkAlive) {
standardServiceFinished(mContext);
break;
}

try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

Log.d(TAG,"The " + attemptTime + " time attempt...." );
if (attemptTime == maxConnectTime - 1) {
Log.d(TAG,"The last time attempt str update....throw Exception...." );
}
attemptTime++;
}

}

}
}

brm報文超時 無法充電,?

對于adsl的鏈接又比較特殊,因為這種連接先是有線的以太連接上,然后才自動撥號。這個時候根據網絡是否通暢來判斷就會出錯,http連接就會超時。

針對該情況給http連接加了重復嘗試機制。完美解決。其實對于上述wifi問題,也不需要在開啟服務之前嘗試,可以統一放至http處嘗試。因為上述解決還存在一點問題:kill了進程后將不會從onReceive發起,錯過嘗試機會。

轉載于:https://www.cnblogs.com/huamaoenjoy/p/4897851.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/184687.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息