Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

에이치의 모바일 앱 개발

Battery-Awake, Sleep 본문

Android/Android 개발 소스

Battery-Awake, Sleep

로이누리 2019. 2. 20. 12:28

디바이스 기본 환경(참조 : https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko)

위 내용을 토대로 단말은 sleep 상태로 변하게 됩니다.

단말이 sleep 상태가 되기 전 앱에서 지속적인 활동이 이루어질 경우 어떠한 방법이 효율적인지 알아보겠습니다.

크게 화면만 보여주는 경우와, 발열을 줄이기 위하여 CPU만 구동되는 경우가 있습니다.


화면 사용으로 인한 베터리 감소방법

지속적인 화면 사용일 경우 (FLAG 사용 (ex. Movie, Game, Equity fund))

설명 : 필수, 특별 권한 설정필요 없다.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

지속적인 CPU 사용일 경우

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wakeLock.acquire(10*60*1000L /*10 minutes*/);

// 배터리 누수 차단
wakeLock.release();

응용 (참조)

(1) AndroidManifest

<uses-permission android:name="android.permission.WAKE_LOCK" />

<application 

..

<service android:name="MyJobIntentService" android:permission="android.permission.BIND_JOB_SERVICE"/>

</application

(2) Java File

@Override
public void onCreate(Bundle savedInstanceStatus) {
super.onCreate(savedInstanceStatus);

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wakeLock.acquire(10 * 60 * 1000L /*10 minutes*/);

wakeLock.release();
}

public class MyWakefulReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyJobIntentService.enqueueWork(context, intent);
}
}

public static class MyJobIntentService extends JobIntentService {
public static final int JOB_INTENT_SERVICE_ID = 1001;

public static void enqueueWork(Context context, Intent work) {
enqueueWork(context, MyJobIntentService.class, JOB_INTENT_SERVICE_ID, work);
}

@Override
public void onCreate() {
super.onCreate();
}

@Override
protected void onHandleWork(Intent intent) {
// 작업 내용 :: enqueueWork()를 통해 전달된 intent 사용
}

@Override
public void onDestroy() {
super.onDestroy();
// 작업 종료
}

@Override
public boolean onStopCurrentWork() {
// 작업 중지
return true;
}
}



'Android > Android 개발 소스' 카테고리의 다른 글

View-ImageView-Picasso-blur  (0) 2019.02.20
View-ImageView-Gradient  (0) 2019.02.20
View-TextView-link  (0) 2019.02.18
롬곡 코드  (0) 2018.09.21
RESTful api란  (0) 2018.04.15
Comments