不要在廣播的onReceive()方法中執行耗時操作
不要在onReceive()方法中新增過多的邏輯或執行耗時操作,因為onReceive()方法執行在主執行緒中,耗時操作會導致ANR。
同時,廣播接收器中不允許開啟子執行緒:
對於靜態註冊的廣播接收器來說,廣播接收器物件的生命週期較短,執行完onReceive()方法就會變為垃圾物件而被回收,在子執行緒執行完之前,若對應的Activity退出,他們所在程序就變成了空程序(沒有任何活動元件的程序),系統需要記憶體時可能會優先終止該程序,程序被終止,其內的子執行緒也會被終止,導致子執行緒無法執行完。
對於動態註冊的廣播接收器來說,Activity退出時會呼叫unregisteReceiver()方法執行解註冊,此時廣播接收器物件也會變成路徑物件而被回收。在子執行緒執行完之前,對應的Activity退出,同樣它們所在程序就變成了空程序,其內的子執行緒也無法執行完。
如果必須執行耗時任務可以考慮,在onReceive中開啟服務來執行。系統就會認為這個程序裡還有其他活動元件在執行,就不會任意時刻回收此程序。
相關推薦
不要在廣播的onReceive()方法中執行耗時操作
不要在onReceive()方法中新增過多的邏輯或執行耗時操作,因為onReceive()方法執行在主執行緒中,耗時操作會導致ANR。 同時,廣播接收器中不允許開啟子執行緒: 對於靜態註冊的廣播接收器來說,廣播接收器物件的生命週期較短,執行完onReceive()方法就會變為垃圾物件而被回收,
Android如何在oncreate方法中執行耗時操作
最近在編寫程式碼時發現一個問題,在編寫了一個網路請求方法時,寫在oncreate的方法中時,往往會跳過請求,我又嘗試新建了一個button,在onclick方法中呼叫,卻發現又可以正確的執行該方法,那麼問題出在哪裡呢? 我查閱了相關資訊,在主執行緒中,我們不能執行耗時操作來
Service中是否可以執行耗時操作
不可以。 Service和activity是執行在當前app所在的main thread(UI主執行緒)中的,而耗時操作(如:網路請求、拷貝資料、大檔案)會阻塞主執行緒,給使用者不好的體驗。 Broadcase耗時操作為10秒,Activity耗時操作為5秒 Ser
[Word]解決Word中執行輸入操作時後面字符自動被刪除的問題
字符 位置 狀態 問題 找不到 輸入 自動 就會 題解 問題分析:這是由於當前輸入方式為“改寫”,在此方式下,如果某個位置處後面有其他字符,當在此位置執行輸入操作時,就會默認刪除其後的所有字符。 解決方案:Word窗口下邊緣狀態欄,找到“改寫”按鈕,點擊,使其切換為“插入”
Oracle——無法在查詢中執行 DML 操作
今天在呼叫Oracle Function遇到一個異常 這是我的函式(為了再現隨手寫的) create or replace function test_f(id varchar2) return varchar2 is Result 
在單獨的main方法中執行spring 管理的類方法
import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.con
不要在構造方法中呼叫可覆寫的方法
如題,這句話來自於《Java解惑》(《Effective java》同一作者)。 在步入正題前我們先來看看kotlin的兩個特性: kotlin沒有引入受檢查的異常,設計這個特性一般認為是思考了Bruce Eckel的《Java是否需要受檢的異常?》,以及Anders Hej
在mybatis同一個方法中執行多個SQL語句實現方法
一、oracle資料 <delete id="delete" parameterType="upc.cbs.HtxxlrEntity"> begin delete from PC_CBS_CONTRA
非同步方法中取消非同步操作
1、在非同步方法中取消非同步操作,第一步必須宣告CancellationToken和CancellationTokenSource兩個類物件,並將兩個類通過 CancellationTokenSource 物件的token屬性關聯; CancellationTokenSource ct
RxJava實戰(後臺執行耗時操作,實時通知 UI 更新)
開源專案 RxJava-Android-Samples,這裡一共介紹了十八種RxJava2的使用場景,這一系列文章主要參考該專案進行。 我們經常會在後臺執行緒中去做一些耗時的操作,比如去網路取資料,處理的方法有 HandlerThread、Threa
UI系統中的耗時操作處理
在框架中事件處理和UI繪製處於同一執行緒中,如果一個事件處理佔用了大量的時間勢必造成使用者操作UI不響應的問題。因此,耗時操作必須放到事件執行緒之外的執行緒中處理,這個必須由客戶端程式自己保
關於在DESTROY方法中執行命令的問題
#!/usr/bin/perl package test; sub new() { my $ref = shift; my $class = ref($ref) || $ref; my $self = {}; bless($self, $cl
Oracle中 “ORA-14551: 無法在查詢中執行 DML 操作” 如何解決
無法 nsa 大於 val oracle 最大值 update 更新序號 max 在編寫一個數據庫函數時,方法實現需要查詢後進行修改,出現ora-14551的錯誤 create or replace function fun_DxcBillSn(tabType int
C#中foreach出現“集合已修改 可能無法執行列舉操作”的解決方法
不要在列舉集合的操作(例如foreach)中去執行修改集合的操作。很多文章中提出解決方法是將foreach改為for迴圈,這裡記錄一種簡便方法。如果需要修改集合,那麼你應該先使用 ToArray() 方法,例如?1234foreach (var x in Mylist.ToA
service是否在main thread中執行, service裡面是否能執行耗時的操作?
預設情況 如果沒有顯示的指定service所執行的程序, Service和activity是執行在當前app所在程序的main thread(UI主執行緒)裡面,service裡面不能執行耗時的操作(網路請求,拷貝資料庫,大檔案 ) broadcast
Java中計算程式執行耗時的方法對比
Java中測試程式程式碼執行時間的方式有兩種: 第一種:以毫秒為單位計算的。 long startTime=System.currentTimeMillis(); //下面是一些測試程式碼 for(int i=0;i<10000;i++){ System.out.pr
java多執行緒——執行緒中的常用操作方法
線上程中所有的方法都是在Thread類中。 執行緒操作的主要方法如下: public Thread(Runnable target )Thread物件接受一個實現了Runnable介面的物件,並例項化這個Thread執行緒! public Thread(Runnable
利用多執行緒解決Tkinter,在button事件中執行高io,高耗時操作,視窗無響應問題
昨天利用python自己寫了一個微型伺服器,突發奇想用Tkinter寫一個GUI介面,並將監聽開始的函式繫結到其中的一個button上,但是當我點選開始服務button時,視窗立馬陷入無響應狀態。搜尋一番發現,是伺服器函式中的while迴圈阻塞了GUI的響應,同理而言
資料庫_基礎知識_SQL中遍歷一張表的每條記錄並對每條記錄執行相應操作的一種方法
sql中遍歷一張表的每條記錄的一種方法: 前提條件:表中存在一個遞增的欄位 如 create table Linkman { ID int incremental, Name nvarchar(50), ..... } 這樣遍歷這張
Android中Service中是否能做耗時操作,兩種啟動模式與服務不被殺死的方法
1.在Service中,一般情況下都是不能在Service中耗時操作的,但是可以在mainifest中設定屬性progress,這樣我們就可以做耗時操作了。 2.Service的兩種啟動模式: 第一種是startService:startService的啟動模式由於沒有和A