Service中是否可以執行耗時操作
不可以。
Service和activity是執行在當前app所在的main thread(UI主執行緒)中的,而耗時操作(如:網路請求、拷貝資料、大檔案)會阻塞主執行緒,給使用者不好的體驗。
Broadcase耗時操作為10秒,Activity耗時操作為5秒
Service耗時操作為20秒
如果需要在服務中進行耗時操作,可以選擇IntentService, IntentService是Service的子類,用來處理非同步請求。
IntentService在onCreate()方法中通過HandlerThread單獨開啟一個執行緒來處理Intent請求物件所對應的任務,這樣可以避免事務處理阻塞主執行緒。
onHandleIntent()函式針對Intent的不同進行不同的事務處理就可以,執行完一個Intent請求物件所對應的工作之後,如果沒有新的Intent請求達到,則自動停止Service; 否則ServiceHandler會取得下一個Intent請求
傳入該函式來處理其所對應的任務。
相關推薦
Service中是否可以執行耗時操作
不可以。 Service和activity是執行在當前app所在的main thread(UI主執行緒)中的,而耗時操作(如:網路請求、拷貝資料、大檔案)會阻塞主執行緒,給使用者不好的體驗。 Broadcase耗時操作為10秒,Activity耗時操作為5秒 Ser
不要在廣播的onReceive()方法中執行耗時操作
不要在onReceive()方法中新增過多的邏輯或執行耗時操作,因為onReceive()方法執行在主執行緒中,耗時操作會導致ANR。 同時,廣播接收器中不允許開啟子執行緒: 對於靜態註冊的廣播接收器來說,廣播接收器物件的生命週期較短,執行完onReceive()方法就會變為垃圾物件而被回收,
Android如何在oncreate方法中執行耗時操作
最近在編寫程式碼時發現一個問題,在編寫了一個網路請求方法時,寫在oncreate的方法中時,往往會跳過請求,我又嘗試新建了一個button,在onclick方法中呼叫,卻發現又可以正確的執行該方法,那麼問題出在哪裡呢? 我查閱了相關資訊,在主執行緒中,我們不能執行耗時操作來
QML中呼叫C++耗時操作造成阻塞的解決辦法
在QML中經常會呼叫用C++寫的比較耗時的操作時,一般會造成介面的卡死。剛開始的時候是想著是不是可以在QML中開闢新執行緒,一查還真有,WorkerScript。但這玩意兒有點坑的是你不能訪問其他物件的屬性、方法,官方原文是這樣寫的: Since the
RxJava實戰(後臺執行耗時操作,實時通知 UI 更新)
開源專案 RxJava-Android-Samples,這裡一共介紹了十八種RxJava2的使用場景,這一系列文章主要參考該專案進行。 我們經常會在後臺執行緒中去做一些耗時的操作,比如去網路取資料,處理的方法有 HandlerThread、Threa
Swing中多執行緒操作UI
由於Swing不是執行緒安全的, 因此在實際操作過程中, 應避免通過多執行緒來操作UI. 在必要時, 應注意要將控制元件轉移到事件排程執行緒。轉移控制元件和開始處理 Swing 的首選方法是使用 invokeLater。 簡單的實踐: 在如下小程式中, 通過最上方或最下方的
service是否在main thread中執行, service裡面是否能執行耗時的操作?
預設情況 如果沒有顯示的指定service所執行的程序, Service和activity是執行在當前app所在程序的main thread(UI主執行緒)裡面,service裡面不能執行耗時的操作(網路請求,拷貝資料庫,大檔案 ) broadcast
禁止在視窗介面執行緒中進行執行緒同步或進行耗時的操作。。。
最近工作時,經常碰到窗口出現未響應的現象,後面發現原因是這樣的: 1、使用者點選XX按鈕時,在XX按鈕事件中呼叫了aa.dll中的介面XXXAPI_TEST(); 2、aa.dll中的介面XXXAPI_TEST()內部有進行執行緒同步的操作。 3、因為執行緒同步的原因,導致
利用多執行緒解決Tkinter,在button事件中執行高io,高耗時操作,視窗無響應問題
昨天利用python自己寫了一個微型伺服器,突發奇想用Tkinter寫一個GUI介面,並將監聽開始的函式繫結到其中的一個button上,但是當我點選開始服務button時,視窗立馬陷入無響應狀態。搜尋一番發現,是伺服器函式中的while迴圈阻塞了GUI的響應,同理而言
Android中Service中是否能做耗時操作,兩種啟動模式與服務不被殺死的方法
1.在Service中,一般情況下都是不能在Service中耗時操作的,但是可以在mainifest中設定屬性progress,這樣我們就可以做耗時操作了。 2.Service的兩種啟動模式: 第一種是startService:startService的啟動模式由於沒有和A
[Word]解決Word中執行輸入操作時後面字符自動被刪除的問題
字符 位置 狀態 問題 找不到 輸入 自動 就會 題解 問題分析:這是由於當前輸入方式為“改寫”,在此方式下,如果某個位置處後面有其他字符,當在此位置執行輸入操作時,就會默認刪除其後的所有字符。 解決方案:Word窗口下邊緣狀態欄,找到“改寫”按鈕,點擊,使其切換為“插入”
Gitlab管理之二–Gitab中創建項目並對項目執行基本操作
bee dsw sam byte 密碼 rep posit -m rand 創建項目 (1)Gitlab項目的可見類型有三種級別。 Private project: 該級別是只有項目擁有者或者已經得到授權的人可以訪問該項目,或者這些人是該項目組的成員。Internal p
[Windows10]記一次修復註冊表相關血案:該文件沒有與之關聯的應用來執行該操作。請安裝應用,若已經安裝應用,請在“默認應用設置”頁面中創建關聯。
src 相關 overflow 還在 一次 註冊表 forum sin 嘗試 今天閑得蛋疼清理了一下右鍵菜單,於是在之後某時刻使用Everything的“雙擊路徑列打開目錄”功能時發現異常: [Window Title] Everything
自動化 - gulp是一個工具包,可幫助您在開發工作流程中自動執行痛苦或耗時的任務
gulp是什麼? 自動化 - gulp是一個工具包,可幫助您在開發工作流程中自動執行痛苦或耗時的任務。 與平臺無關 - 整合內置於所有主要IDE中,人們正在使用gulp與PHP,.NET,Node.js,Java和其他平臺。 強大的生態系統 -
Oracle——無法在查詢中執行 DML 操作
今天在呼叫Oracle Function遇到一個異常 這是我的函式(為了再現隨手寫的) create or replace function test_f(id varchar2) return varchar2 is Result 
Android中判斷service是否在執行
/** * 判斷服務是否開啟 * * @return */ public static boolean isServiceRunning(Context context, String ServiceName) { if (TextUti
.NET/C# 在程式碼中測量程式碼執行耗時的建議(比較系統性能計數器和系統時間)
我們有很多種方法評估一個方法的執行耗時,比如使用效能分析工具,使用基準效能測試。不過傳統的在程式碼中編寫計時的方式依然有效,因為它可以生產環境或使用者端得到真實環境下的執行耗時。 如果你希望在 .NET/C# 程式碼中編寫計時,那麼閱讀本文可以獲得一些建議。閱讀本文也可以瞭解到 Qu
MFC中執行出現問題“不支援嘗試執行的操作”
問題描述: 基於CDialogEx的對話方塊工程.VS2010開發環境. 除錯執行到OnInitDialog()的CDialogEx::OnInitDialog()方法的時候彈出提示視窗“不支援嘗試執行的操作”。 原因: 在函式對話方塊上的控制元件之後相應的關
為使用者“NT AUTHORITY/NETWORK SERVICE”授予的許可權不足,無法執行此操作。 (rsAccessDenied)
在VISTA作業系統裡建立SQL報表時使用reportview訪問報表時提示下面錯誤: 為使用者“NT AUTHORITY/NETWORK SERVICE”授予的許可權不足,無法執行此操作。 (rsAccessDenied) 解決方案: 1,在IIS裡訪問http://localhost/R
android 開啟執行緒查詢資料,耗時操作
try { final Handler handler = new Handler(); final Runnable callBack = new