Layout 을 생성하는 것은 기존의 Layout 을 작성하는 것과 별반 차이가 없으나, 

Widget 에서는 사용할 수 있는 View 가 한정되어 있다.


Home Screen 에 보여지는 View 는 RemoteViews 에 기반하고 있으며, 

RemoteViews 하위에 디자인한 View 가 속하게 된다.


기존의 모든 layout class 들을 모두 지원하지는 않고, 아래의 클래스들을 지원한다.

FrameLayout, LinearLayout, Relativelayout

AnalogClock, Button, Chronometer, ImageButton, 

ImageView, ProgressBar, TextView, ViewFlipper


AppWidgetProvider 는 BroadcastReceiver 클래스를 상속받았기에, 

시간이 많이 소요되는 작업은 그 처리 결과를 보증할 수 없다. 

따라서 시간이 많이 걸리는 작업은 별도의 Service 를 만들어서 실행해야 한다.



Android Service는 백그라운드에서 실행되는 프로세스입니다. 

안드로이드 OS에서 특별한 경우를 제외하고는 백그라운드에서 동작하도록 설계되어 있습니다. 


Background Service

우리가 흔히 말하는 서비스가 백그라운드 서비스 형태입니다. 시스템의 메모리가 부족할 경우 시스템이 해당 서비스를 강제로 종료시킬 수 있습니다. 


Foreground Service

서비스의 우선 순위가 높아서, 시스템의 메모리가 부족하더라도 강제로 종료시키지 않습니다. 

대신 상태바에 Notification이 표시됩니다. 과거에는 상태바에 Notification을 표시하지 않고도 

Foreground Service로 실행할 수가 있었는데, 

현재는 구글 정책으로 Foreground Service를 

수행하기 위해서는 무조건 사용자에게 표시를 해야 하도록 변경되었습니다.



백그라운드 서비스 생성이 허용되지 않는 상황에서 Android O를 대상으로 하는 앱이 startService() 메서드를 사용하려고 시도할 경우 

이제 이 메서드가 IllegalStateException을 발생합니다.


새로운 Context.startForegroundService() 메서드가 포그라운드 서비스를 시작합니다. 

앱이 백그라운드에 있는 중에도 시스템은 앱이 Context.startForegroundService()를 호출하도록 허용합니다. 


시스템이 서비스를 생성한 후, 앱은 5초 이내에 해당 서비스의 

startForeground() 메서드를 호출하여 새 서비스의 알림을 사용자에게 표시해야 합니다. 

앱이 이 시간 한도 내에 startForeground()를 호출하지 않으면 

시스템이 서비스를 중단하고 이 앱을 ANR로 선언합니다



처리방안 

1. JobScheduler를 통한 백그라운드 동작


2. 5초 내에 Service.startForeground() 를 통해 Notification과 연결


3. AlarmManager PendingIntent 전달 



'안드로이드 > Android O (8.0)' 카테고리의 다른 글

알림채널  (0) 2017.08.18
Android O (8.0) 기능  (0) 2017.08.18

Android O에는 사용자의 알림 관리에 도움이 되는 통합 시스템을 제공하기 위해 알림 채널이 도입됩니다. 

Android O를 대상으로 할 때 사용자에게 알림을 표시하는 하나 이상의 알림 채널을 구현해야 합니다. 

Android O를 대상으로 하지 않을 경우, Android O 기기에서 앱을 실행하면 Android 7.0에서와 동일하게 동작합니다.



'안드로이드 > Android O (8.0)' 카테고리의 다른 글

백그라운드 실행 제한  (0) 2017.08.18
Android O (8.0) 기능  (0) 2017.08.18

[버전]

compileSdkVersion  : 빌드에 사용할 안드로이드 SDK 버전입니다. 

                               API Level로 지정하며, 여기에서는 19 (안드로이드 4.4/KitKat) 버전을 사용하고 있습니다.

buildToolsVersion   : 빌드에 사용할 툴 버전을 지정합니다.

minSdkVersion       : 애플리케이션을 실행하기 위한 최소 버전을 입력합니다.

targetSdkVersion    : 애플리케이션이 주로 실행될 버전을 지정합니다.

'안드로이드' 카테고리의 다른 글

Doze Mode  (0) 2017.08.18
ADB 명령어  (0) 2017.08.18
메모리  (0) 2017.08.18
해상도  (0) 2017.08.18
프래그먼트에서 OptionMenu 사용  (0) 2017.04.07

Android O (8.0) OS 

1.  알림 채널 : 알림 수신 세부 설정 가능

2.  보안 강화 : 앱 설치 시 승인 필수

3.  화면 속 화면(Picture in picture, PIP)

4.  사용자가 원하는 구성으로 잠금 화면 단축 아이콘 설정 가능

5.  자동완성 API : 사용자 데이터를 저장하여 자동완성으로 이용 가능

6.  TextView 자동 크기 조절

7.  아이콘 알림 뱃지(Notification Dots)

8.  스마트 텍스트 선택(Smart Text Selection)

9.  WebView 멀티 프로세스가 가능해졌고 크래시가 발생할 경우 제어 방법도 선택할 수 있습니다. 

    렌더러에 대한 중요도도 선택할 수 있어 선택 폭이 훨씬 넓어졌습니다

10.백그라운드 실행 제한 - 위치서비스, 와이파이 스캔



'안드로이드 > Android O (8.0)' 카테고리의 다른 글

백그라운드 실행 제한  (0) 2017.08.18
알림채널  (0) 2017.08.18

[Doze]

1. Android 6.0 이후 버전에 적용

2. 아래의 상태에서 일정 시간 이후 Doze 모드 진입

   충전 중이 아님

   스크린 꺼져 있음

   일정 수치 이상 움직이지 않음

3. 제한되는 사항

   AlarmManager 의 Alarm

   JobService

   WakeLock 무시

   네트워크 접근 제한

4. 회피 방법

   AlarmManager#setExactAndAllowWhileIdle() - Doze 에서도 동작하지만

  최대 15분에 한 번씩만 동작 가능 GCM high priority message

 

[App Standby]

1. Android 6.0 이후 버전에 적용

   일정 기간 동안 아래 상황 중 하나도 발생하지 않은 경우 시스템에서 해당 앱을 standby state 로 간주

   명시적 앱 실행

   액티비티나 서비스가 포그라운드(전경)에서 실행 중, 혹은 포그라운드에서 실행 중인 앱이 해당 앱의 컴포넌트 사용중

   알림을 생성하고 유저가 잠금 화면이나 알림 트레이에서 확인한 경우

2. 제한되는 사항

   네트워크 사용 및 동기화 기능 사용 불가

3. 회피방법

   유저와 상호 작용

   유저가 디바이스 충전

  

[스마트 매니저]

1. 삼성에서 킷캣 (안드로이드 4.4) 이후의 모델 (일부 제외)에 적용

 

LMK (Low Memory Killer)

안드로이드의 각각의 프로세스는 특성에 따라 상태가 부여됨

각 상태는 제한되는 메모리 사이즈가 정해져 있고, 디바이스의 가용 메모리가 해당 사이즈 이하로 떨어질 시 시스템에서 프로세스를 종료

START_STICKY 로 실행한 서비스의 경우 일정 시간 이후에 null Intent 를 가진채로 재시작

킷캣 이상에서 PID가 0이 된 채로 남아있는 버그가 있음

ActivityManager#getRunningServices 에서 서비스 리스트를 가져 왔을때 찌꺼기가 존재

'안드로이드' 카테고리의 다른 글

버전  (0) 2017.08.18
ADB 명령어  (0) 2017.08.18
메모리  (0) 2017.08.18
해상도  (0) 2017.08.18
프래그먼트에서 OptionMenu 사용  (0) 2017.04.07

설치 : install [options] 패키지명


     r: 기존 앱을 다시 설치하고 그 데이터는 유지합니다.

     d: 버전 코드 다운그레이드를 허용합니다.




adb shell am broadcast -m com.myapp -a com.google.android.c2dm.intent.RECEIVE -e key "data"


adb shell dumpsys notification 


adb shell dumpsys meminfo 'your package'


adb shell dumpsys statusbar | grep notification=Notification

'안드로이드' 카테고리의 다른 글

버전  (0) 2017.08.18
Doze Mode  (0) 2017.08.18
메모리  (0) 2017.08.18
해상도  (0) 2017.08.18
프래그먼트에서 OptionMenu 사용  (0) 2017.04.07

  String msg =

 "(★ memory size : " +  ((ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass() +"\n" +

 "(★ dalvik heap 최대로 할당될 수 있는 메모리 크기 : " + Runtime.getRuntime().maxMemory() / (1024 * 1024) + "mb \n" +

 "(★ dalvik heap  현재 힙에 할당된 총 메모리 크기 : " + Runtime.getRuntime().totalMemory() / (1024 * 1024) + "mb \n" +

 "(★ dalvik heap 여유 공간 : " + Runtime.getRuntime().freeMemory() / (1024 * 1024) + "mb \n" +

 "(★ dalvik heap 할당된 크기 : " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024) + "mb \n" +

 "(★ getNativeHeapSize : " + Debug.getNativeHeapSize() / (1024 * 1024) + "mb \n" +

 "(★ getNativeHeapFreeSize : " + Debug.getNativeHeapFreeSize() / (1024 * 1024) + "mb \n" +

 "( getNativeHeapAllocatedSize : " + Debug.getNativeHeapAllocatedSize() / (1024 * 1024) + "mb \n";

'안드로이드' 카테고리의 다른 글

Doze Mode  (0) 2017.08.18
ADB 명령어  (0) 2017.08.18
해상도  (0) 2017.08.18
프래그먼트에서 OptionMenu 사용  (0) 2017.04.07
안드로이드 업로드 이미지 리사이징  (0) 2017.04.05

+ Recent posts