Service在後台長期執行的解決方案

2021-06-19 12:30:58 字數 1736 閱讀 4723

在日常開發當中,我們經常會有各種的需求要讓乙個service在後台長期執行(最常見的需求為懸浮窗),但是由於android的記憶體機制導致在系統不足的時候,service等後台程序首先會被系統**。為了優化使用效果,我們可以從如下三個方面優化。

1、第一種(也是最常見的一種)

將service設定成前台程序:startforeground()。示例**:

notification notification = new notification(r.drawable.icon, gettext(r.string.ticker_text),system.currenttimemillis());

intent notificationintent = new intent(this, exampleactivity.class);

pendingintent pendingintent = pendingintent.getactivity(this, 0, notificationintent, 0);

notification.setlatesteventinfo(this, gettext(r.string.notification_title),gettext(r.string.notification_message), pendingintent);

startforeground(ongoing_notification_id, notification);

將service從前台程序中移除:stopforeground()

這種方法在4.3以前都是可以任意用的。但是4.3系統優化android的安全機制,將乙個service設定成前台程序,系統會在通知欄一直顯示乙個notifycation提示使用者有乙個service一直在執行。所以這種方法也不是完美的。

獲取鎖:

wakelock mwakelock=null;
powermanager pm = (powermanager) getsystemservice(context.power_service);

/*** powermanager.partial_wake_lock:保持cpu運轉,螢幕和鍵盤燈可能是關閉的

* powermanager.screen_dim_wake_lock:保持cpu運轉,執行螢幕顯示但是螢幕有可能是灰的,允許關閉鍵盤燈

* powermanager.screen_bright_wake_lock:保持cpu運轉,螢幕高亮顯示,允許關閉鍵盤燈

* powermanager.full_wake_lock:保持cpu運轉,螢幕高亮顯示,鍵盤燈高亮顯示

* powermanager.on_after_release:當鎖被釋放時,保持螢幕亮起一段時間

* powermanager.acquire_causes_wakeup:強制螢幕亮起

*/mwakelock = pm.newwakelock(powermanager.partial_wake_lock, "soundrecorder");

mkeyguardmanager = (keyguardmanager) getsystemservice(context.keyguard_service);

mwakelock 

.acquire();

釋放鎖

if (mwakelock.isheld())
最後注意許可權問題。

iOS 保持APP在後台長時間執行

1 background audio2 picture in picture3 voip 後台語音服務,類似skype通話應用需要呼叫,可進行後台的語音通話。4 location services 這是後台的定位,系統會擁有統一頁面進行管理。5 newsstand downloads6 extern...

後台長期執行程序的三種方式

入門 nohup command var log test.log2 1 優雅 screen方式,通過screen 命令建立的環境下執行的終端命令,其父程序不是sshd 登陸會話,而是screen,這樣就可以避免使用者退出程序消失的問題,有隨時能重新接管終端繼續操作。命令如下 screen sds ...

ORMLite在後台service中進行資料處理

第一步 建立類和在libs加入ormlite的jar包 如圖 一點要記住在androidmanifest.xml中進行註冊 建立類的內容 mainactivity類 pangcreateormlite類 pangservice類 student類 package com.kiaoke.ormlite...