본문 바로가기
안드로이드/개발자 일상

안드로이드 베터리 최적화 풀기 ( 잠자기 모드 해제 )

by 차누감 2020. 4. 22.
반응형

도즈 모드, 잠자기 모드일 시 제한사항과 관련 자세한 사항은 아래 개발자 사이트를 참조하시기 바랍니다.

https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko

 

잠자기 및 앱 대기 모드에 맞게 최적화하기  |  Android 개발자  |  Android Developers

앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다.

developer.android.com

잠자기 모드 이해

사용자가 플러그를 뽑고 화면이 꺼진 채로 기기를 일정 기간 정지 상태로 두면 기기는 잠자기 모드를 시작합니다.

 

제한사항

  • 네트워크 엑세스 정지
  • wake lock 무시
  • 유지보수 기간 지연
  • 동기화 어댑터 실행 X
  • JobScheduler 실행 X

특정 앱을 베터리 최적화에 들어가지 않게 하는 방법입니다.

 

AndroidManifest.xml


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

 

[핵심 코드]

1
2
3
4
5
6
7
8
9
10
 PowerManager pm= (PowerManager) getSystemService(Context.POWER_SERVICE);
        String packageName= getPackageName();
        if (pm.isIgnoringBatteryOptimizations(packageName) ){
 
        } else {    // 메모리 최적화가 되어 있다면, 풀기 위해 설정 화면 띄움.
            Intent intent=new Intent();
            intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
            intent.setData(Uri.parse("package:" + packageName));
            startActivityForResult(intent,0);
        }
 

 

예제 코드 onCreate()에 넣었습니다.

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
32
33
34
35
36
 
import androidx.annotation.RequiresApi;
 
import android.content.Context;
import android.provider.Settings;
 
public class MainActivity extends AppCompatActivity {
 
    @RequiresApi(api = Build.VERSION_CODES.M)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        PowerManager pm= (PowerManager) getSystemService(Context.POWER_SERVICE);
        String packageName= getPackageName();
        if (pm.isIgnoringBatteryOptimizations(packageName) ){
 
        } else {    // 메모리 최적화가 되어 있다면, 풀기 위해 설정 화면 띄움.
            Intent intent=new Intent();
            intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
            intent.setData(Uri.parse("package:" + packageName));
            startActivityForResult(intent,0);
        }
 
    }// onCreate()..
 
}// MainActivity class..
 
 

<실행 화면> 

<실제 휴대폰 화면>

반응형

댓글