상세 컨텐츠

본문 제목

[Android] 안드로이드 개발 시 주의사항 - 절전모드, 백그라운드 실행시 주의할 점

스마트기기개발관련/안드로이드 개발

by AlrepondTech 2016. 4. 22. 11:17

본문

반응형
728x170

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

출처: http://m.blog.naver.com/devstory/130104356488

 

 

절전 모드로 인하여 wifi 가 꺼지는 것을 방지하기 위해

 

wifiLock 과 wakeLock 을 등록한다.

 

wifiLock 는 말그대로 wifi 상태만 유지

 

wakeLock 는 cpu 상태를 유지하기 위해 사용하였다.

 

wakeLock 의 FLAG 에는 아래와 같이 6가지가 존재한다.

 

PARTIAL_WAKE_LOCK : CPU ON, 화면은 꺼짐, 키보드 꺼짐

SCREEN_DIM_WAKE : CPU ON, 화면 어둡게, 키보드 꺼짐

SCREEN_BRIGHT_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 꺼짐

FULL_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 ON

 

추가가 가능하나 PARTIAL_WAKE_LOCK 과는 같이 써도 소용 없는 FLAG 2개

ACQUIRE_CAUSES_WAKEUP : acquire 할 때 스크린과 키보드를 켜줌으로써 중요한 통지(notification)이

왔을 때 사용자가 화면을 바로 볼 수 있도록 함.

ON_AFTER_RELEASE : WakeLock 이 릴리즈 되었을 때 유저 액티버티 타이머가 리셋 되어지고 스크린을 좀더 오래 켤 수 있고, wake lock 을 반복적으로 수행하는 사이에 발생하는 깜빡임 현상을 줄이고자 할 때 사용.

 

샘플 :

 

 WifiLock wifiLock = null;
 WakeLock wakeLock = null;

 public void changeToWakeMode() {

  if (wifiLock == null) {
   WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
   wifiLock = wifiManager.createWifiLock("wifilock");
   wifiLock.setReferenceCounted(true);
   wifiLock.acquire();
  }

  if (wakeLock == null) {
   PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
   wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "wakelock");
   wakeLock.acquire();
  }
 }

 @Override
 public void onStop() {

  if (wifiLock != null) {
   wifiLock.release();
   wifiLock = null;
  }

  if (wakeLock != null) {
   wakeLock.release();
   wakeLock = null;
  }
  
  super.onStop();
 }

 

참고 :

 

http://eddykudo.com/64

http://2-up.tistory.com/713

http://developer.android.com/reference/android/os/PowerManager.html

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

 

 

 

=================================

=================================

=================================

 

 

절전모드로 안들어가게 하는 소스입니다.

 

밝기를 고정 시킨다는 거죠

 

 

 

(Java 코드)

 

PowerManager powerManager = (PowerManager) getSystemService(Context.POWER.SERVICE);

WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Tag");

wakeLock.acquire();

 

//화면이 밑의 구문이 나올때까지 밝기고정 됩니다.

 

wakeLock.release();

 

 

*매니페스트 파일

 

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

 

 

 

 

자바코드에 진하게 해놓은 부분에는 다른 속성이 들어갈수있습니다

 

 

 속성 CPU Screen Keyboard 
PARTIAL_WAKE_LOCK On off off 
 SCREEN_DIM_WAKE_LOCK On Dim(어둑하게) off 
 SCREEN_BRIGHT_WAKE_LOCK  On Bright(반짝반짝) off 
FULL_WAKE_LOCK  On  Bright Bright 

 

 

 

 

이상입니다.

 

=================================

=================================

=================================

 

 

 

반응형

 

 

 

728x90

 

 

 

 

출처: http://blog.naver.com/PostView.nhn?blogId=devstory&logNo=130104356488

 

 

절전 모드로 인하여 wifi 가 꺼지는 것을 방지하기 위해

 

wifiLock 과 wakeLock 을 등록한다.

 

wifiLock 는 말그대로 wifi 상태만 유지

 

wakeLock 는 cpu 상태를 유지하기 위해 사용하였다.

 

wakeLock 의 FLAG 에는 아래와 같이 6가지가 존재한다.

 

PARTIAL_WAKE_LOCK : CPU ON, 화면은 꺼짐, 키보드 꺼짐

SCREEN_DIM_WAKE : CPU ON, 화면 어둡게, 키보드 꺼짐

SCREEN_BRIGHT_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 꺼짐

FULL_WAKE_LOCK : CPU ON, 화면 밝게, 키보드 ON

 

추가가 가능하나 PARTIAL_WAKE_LOCK 과는 같이 써도 소용 없는 FLAG 2개

ACQUIRE_CAUSES_WAKEUP : acquire 할 때 스크린과 키보드를 켜줌으로써 중요한 통지(notification)이

왔을 때 사용자가 화면을 바로 볼 수 있도록 함.

ON_AFTER_RELEASE : WakeLock 이 릴리즈 되었을 때 유저 액티버티 타이머가 리셋 되어지고 스크린을 좀더 오래 켤 수 있고, wake lock 을 반복적으로 수행하는 사이에 발생하는 깜빡임 현상을 줄이고자 할 때 사용.

 

샘플 :

 

 WifiLock wifiLock = null;
 WakeLock wakeLock = null;

 public void changeToWakeMode() {

  if (wifiLock == null) {
   WifiManager wifiManager = (WifiManager)getSystemService(WIFI_SERVICE);
   wifiLock = wifiManager.createWifiLock("wifilock");
   wifiLock.setReferenceCounted(true);
   wifiLock.acquire();
  }

  if (wakeLock == null) {
   PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
   wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "wakelock");
   wakeLock.acquire();
  }
 }

 @Override
 public void onStop() {

  if (wifiLock != null) {
   wifiLock.release();
   wifiLock = null;
  }

  if (wakeLock != null) {
   wakeLock.release();
   wakeLock = null;
  }
  
  super.onStop();
 }

 

참고 :

 

http://eddykudo.com/64

http://2-up.tistory.com/713

http://developer.android.com/reference/android/os/PowerManager.html

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

 

 

 

=================================

=================================

=================================

 

 

 

출처: http://drcarter.tistory.com/99

 

 

  안드로이드의 특징중에 하나를 꼽는다면 백그라운드 실행이라고 할 수 있겠습니다. 아이폰과 다르게 멀티테스킹이 가능한
안드로이드는 그만큼 활용도가 많다는 것입니다. 하지만 그것에 따른 다른 주의 사항이 있습니다.
그 중에 하나가 바로 wifi모드를 유지하는 것입니다.

  안드로이드는 대기 모드로 들어가게 되면 배터리 소모를 줄이기 위해서 wifi를 자동으로 꺼버리게 됩니다. 하지만 무선으로
데이터를 주고 받는 중이거나, 스티리밍을 하고 있는 중간에 대기 상태로 들어가게 되고 자동으로 wifi가 꺼지게 된다면 3G
의 무선 데이터 모드로 바뀌게 되겠지요. 그렇게 된다면 3G 데이터의 사용이 많아지게 되고 나중엔 사용자의 요금에 지대한
영향을 줄 것으로 생각됩니다.
  백그라운드 실행 중에도 wifi 상태를 유지하기 위해서는 

android.net.wifi.WifiManager.WifiLock


을 이용해서 wifi상태를 유지시켜줘야 합니다.
자세한 설명음
http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
이 곳에 가시면 확인할 수 있습니다.

간단히 사용방법을 보게 된다면

1
2
3
4
5
6
7
8
9
10
11
12
13
WifiManager.WifiLock wifiLock = null;
//등록
if (wifiLock == null) {
                WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
    wifiLock = wifiManager.createWifiLock("wifilock");
    wifiLock.setReferenceCounted(true);
    wifiLock.acquire();
}
//해제
if (wifiLock != null) {
                wifiLock.release();
    wifiLock = null;
}


이렇게 하면 됩니다.
대기 상태에서도 wifi를 유지하고 있게 된다면, 배터리 소모가 빠르고 많아진다는 단점이 있지만, 그만큼 3G 데이터를 사용하는것이 적어진다는 것에 대한 장점도 있게 됩니다.

  두번째로 주의할 점은, 대기상태가 오래 된다면 cpu의 활동을 정지시켜 버립니다. 이것도 배터리 소모를 줄이기 위한 것이기는 하지만, 단적인 예로 들어서 스트리밍으로 음악을 듣고 있는 중에서 화면을 꺼버린 대기 모드일 경우에 cpu를 정지 시킨다면 음악을 들을 수 없게 되겠지요. 그래서 wifi상태를 유지 시켜주기 위한 WifiLock이 있듯이 cpu상태를 활동상태로 유지시켜주는 WakeLock이 있습니다.

android.os.PowerManager.WakeLock


자세한 설명은
http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
이곳에 가셔서 확인해 볼 수 있습니다.

이것을 사용하는 방법은 간단히

1
2
3
4
5
6
7
8
9
10
11
12
PowerManager.WakeLock wakeLock = null;
//등록
if (wakeLock == null) {
    PowerManager powerManager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "wakelock");
    wakeLock.acquire();
}
//해제
if (wakeLock != null) {
    wakeLock.release();
    wakeLock = null;
}


이렇게 하면 됩니다.

이 두가지를 유지시켜 준다면, 백그라운드로 실행을 하면서 대기 모드로 전환이 된다고 해도, 해당 어플이 죽거나 하는 일은 없겠지만, 그만큼 배터리 소모가 많아지기 때문에 안드로이드폰을 오래 사용할 수는 없겠지요. 

 

 

=================================

=================================

=================================

 

 

반응형
그리드형


관련글 더보기

댓글 영역