글

[번역] [Androd] Intelligent Job-Scheduling

Intelligent Job-Scheduling In this document Android Framework JobScheduler AlarmManager Firebase JobDispatcher Additional Facilities SyncAdapter Services Additional Points 최근의 앱들은 사용자 인터렉션의 직접적인 흐름외에, 비동기로 많은 작업들을 수행할 수 있다. 비동기 작업의 몇가지 예는 다음과 같다: 네트워크 리소스의 업데이트 정보의 다운로드 백그라운드 작업의 업데이트 시스템 서비스 호출의 스케쥴링 이 작업들을 현명하게 스케쥴링 하면, 배터리 수명과 같은 시스템 상태와 함께 앱 성능을 개선시킬 수 있다.  JobScheduler 가 이 스케쥴링 작업을 수행한다 . 앱이 백그라운드 작업을 스케쥴 할 수 있게 해주는 몇개의 API가 있다 .이 옵션들 중 가장 중요한 것은  JobScheduler 이다. 이  JobScheduler  API를 사용하면 최적의 시스템 상태를 위해 단말에서 중앙집중형 작업 스케쥴링과 함께 작업실행에 강력한 조건을 지정할 수 있다. JobScheduler 는 또한 확장성이 뒤어난 기능을 제공한다. 캐시지우기 같은 작은 작업에 적합할 뿐 아니라 DB를 클라우드에 동기화 시키는 것과 같은 대규모 작업에도 적합하다. In addition to  JobScheduler , there are several other facilities available to help your app schedule work.  JobScheduler 외에도, 앱의 스케쥴링을 돕는 아래와 같은 몇가지 기능이 있다. AlarmManager Firebase JobDispatcher SyncAdapter Additional Facilities 이 페이지는  JobScheduler ...

[번역] [Android O Preview] Background Location Limits

Background Location Limits In this document Foreground app behavior is preserved Tuning your app's location behavior Affected APIs Power 소모를 줄이기 위해, Android O 개발자 Preview는 App의 Target SDK Version과 관계 없이 사용자의 현재 위치를 검색할 수 있는 빈도를 제한한다. 이 위치 검색은 만약 앱이 background에서 수행되는 동안 실시간 Alert과 모션인식에 의존한다면, 계속 유의해야 한다.  중요:  백그라운드 앱이 매시간마다 몇번 위치 업데이트를 받을 수 있도록 허용중이다. 개발자의 피드백과 시스템 영향을 기반으로 Preview를 통해 위치 업데이트 간격을 조정중이다. 시스템은 background앱과 foreground앱을 구분한다. 앱은 아래의 조건중 하나라도 참일때 foreground로 간주된다. 액티비티가 started혹은 paused이더라도 하나의 보여지는 activity를 가지고 있다.  하나의 foreground service를 가지고 있다. 또 다른 Foreground 앱이 이 앱의 서비스중 하나에 binding되었거나, 이 앱의 Content Provider중 하나를 사용하여 연결되었다.  만약에 이 조건들 중 true가 되는 것이 없다면, 그 앱은 background 앱으로 간주된다. Foreground app behavior is preserved If an app is in the foreground on a device running Android O, the location update behavior is the same as on Android 7.1.1 (API level 25) and lower. 만약 앱이 Android O 단말에서 foreground라면 위치 업데이트는 And...

[번역] [Android O Preview] Background Execution Limits

Background Execution Limits Overview Background Service Limitations Broadcast Limitations Migration Guide 언제든, 앱이 백그라운드에서 실행하려고 하면, 앱은 램과 같은 디바이스의 제한된 리소스를 소비하게 된다. 이로 인해 사용자가 게임이나 비디오 감상처럼 리소스 집약적인 앱을 사용할 경우 사용자 경험이 손상될 수 있다.  Android O에서는 사용자 경험을 개선시키기 위해 백그라운드에서 실행되는 동안 앱이 할 수 있는 것들에 제한을 두고있다.  이 문서는 OS의 변화와, 이러한 새로운 제한환경안에서 당신의 앱이 잘 구동될 수 있도록 어떻게 업데이트를 해야하는지를 기술하고 있다. 개요 많은 안드로이드 앱들과 서비스들은 동시에 실행될 수 있다. 예를 들어, 사용자가 하나의 윈도우에서 게임을 하고 있고 다른 윈도우에서는 웹브라우징을 하며, 음악감상을 위해 세번째 앱을 쓸 수 있다.  한번에 더 많은 앱을 실행할 수록, 시스템에는 더 많은 부하가 걸린다.  만약 추가적인 앱/서비스가 백그라운드에서 실행되고 있다면,  시스템에 추가적인 부하가 발생해서 사용자 환경이 좋지 않을 수 있다. 예를 들어, 뮤직앱이 갑자기 종료된다거나.. 이러한 경우를 낮추기 위해, Android O에서는 사용자가 직접 상호작용하지 않는 동안 앱들이 무엇을 할 수 있는지에 대한 제한을 두었다. 만약 앱의 타겟이 Android O인 경우, 아래 두가지 방법으로 제한된다. Background Service 제한  : 앱이 Idle 상태인 동안, 백그라운스 서비스 사용에 제한이 있다. 이것은 사용자들에게 좀 더 잘 보이는 Foreground service에는 적용되지 않는다. Broadcast 제한  : 앱은 예외를 제외하고, implicit broadcasts를 등록하기 위해 m...

[Android] View 생성시 주요 Method 호출 순서

Test는 Button Class를 extends 한 CustomButton 으로 진행. 1. Constructor() ------ View 기본 설정 ------ 2. onFinishInflate() 3. setLayoutParams() 4. requestLayout() 5. invalidate() ------ Window에 Attach ------ 6. onAttachedToWindow() 7. invalidate() 8. onWindowVisibilityChanged(int visibility)    : attach 된 Window의 Visibility 변경 9. onVisibilityChanged()  [1번째 호출]    : View의 Visibility 변경 10. refreshDrawableState() 11. onCreateDrawableState() 12. dispatchVisibilityChanged() 13. onVisibilityChanged() [2번째 호출] 14. invalidate() 15. dispatchVisibilityChanged() 16. onVisibilityChanged() [3번째 호출] 17. invalidate() 18. scrollTo() [1번째 호출] 19. onMeasure() 20. dispatchApplyWindowInsets() 21. onApplyWindowInsets() 22. fitSystemWindows() 23. dispatchApplyWindowInsets() 24. onApplyWindowInsets() 25. fitSystemWindows() 27. scrollTo() [2번째 호출] 28. onMeasure() 29. getSuggestedMinimumHeight() 30. scrollTo() [3번째 호출] 31. onMeasure() 32. layout() 33. onSizeCh...

android Notification의 Small Icon을 감싸는 색상 지정하기

이미지
이것을 무엇이라 검색을 해야할지 감이 안와서 이런저런 검색을 해보고 고민을 하다가 특정 API가 있는것을 확인하고 아래와 같이 글을 쓴다.  위의 그림에서 노란색 동그라미 영역안에 보이는 아이콘을 커스텀으로 할 수 있는지에 대해 여러방면으로 알아봤다. 관련된 결론을 내면 아래와 같다. (해당 위치의 아이콘을 아래에서는 "노티 위 작은 아이콘" 으로 한다.) 1. LargeIcon 옆의 작은 아이콘은 Small Icon이다.    이 Small Icon은         위와 같이 상단 Indicator에 보여지는 아이콘과 동일하다.     5.0(롤리팝) 이상에서는 해당 아이콘이 흰색이어야 한다.     만약 흰색이 아닌경우는 Crash까지 발생하는 단말이 있다.     또한 흰색이 아닌경우는 "노티 위 작은 아이콘"에     가장 유사한 형태의 기본 아이콘이 위치하게 된다.     흰색의 아이콘인 경우는 정상적으로 노출. 2. 그 다음 의문은, "노티 위 작은 아이콘"을 감싸는 색상인데    Notification.Builder의 setColor를 설정을 하면 색상이 설정된다.   3. Indicator에 노출되는 아이콘과, "노티 위 작은 아이콘"은    디자인을 다르게 할 수 없다. 위의 내용은 너무나 간단한 것인데, 찾는데 시간이 걸렸어서 위와같이 간단히 정리를 해둡니다.

CustomView로 Android Notification 띄우기

현재 Android 7.0까지 나온 상황에서 6.0 이상에 추가된 Notification의 모든 기능을 활용하는 코드는 아니지만 5.0 부터 추가된 Headup Notification까지는 포함하는 코드이다. 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 37 38 39 public   static   int  showNotification(Context context,  int  iconResId, RemoteViews view, RemoteViews bigView, Class activityCls) {     Notification.Builder builder  =   new  Notification.Builder(context)             .setSmallIcon(iconResId)             .setWhen( System .currentTimeMillis())             .setPriority(Notification.PRIORITY_MAX)         ...

bat 파일을 통해 반복적인 Encoding 처리

HEVC 영상들울 h264로 바꿔야 하는 작업이 필요했다. 단순히 Code로 작성하면 단순하지만 그렇게까지 코딩하고 싶지 않았기에 BAT 파일로 만드는 방법을 찾아보던 중 아래와 같은 방법을 발견했다. @ECHO OFF for %%i in (625 626 627 628 629) do ( for %%j in (0 1 2 3 4 5 6 7 8 9) do (     ffmpeg -i G:\SAM_%%i%%j.MP4 -acodec aac -ar 48000 -ab 640k -vcodec libx264 -b 100000k -r 29.97 G:\E_SAM_%%i%%j.MP4 ) ) %%i와 %%j는 일반 코딩에서 변수 정도로 보면 된다. for-each문과 유사한 형태. ffmpeg의 옵션값들은 별도의 글들을 통해 확인해보길 바란다.