在日常開發當中,我們經常會有各種的需求要讓乙個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...