Skip to content

yks8890/HelloDaemon-master

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

HelloDaemon

Android ์„œ๋น„์Šค ์œ ์ง€/์ƒ์ฃผ (Android Service Daemon)

์•ฑ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋งŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉ ๋œ ์—ฐ๊ฒฐ ์œ ์ง€ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์˜ ๋ธ”๋กœ๊ทธ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ถ€๋ถ„์ ์œผ๋กœ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค. D-clock์˜ Android DaemonService๋กœ๋ถ€ํ„ฐ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ํฌ์–ด ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋‹ค๋ฅธ ๋น„ ๊ธฐ๋ณธ ๋ ˆ์ด์–ด Keepalive ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์„ธ์Šค ๊ฑฐ์ฃผ์ž (2) - ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์ž์„ธํ•œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์œ ์ง€

D-clock / AndroidDaemonService

##์œ„์˜ 2 ๊ฐœ์˜ ๋งํฌ ๋Œ€๋ถ€๋ถ„์ด ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค :

1.ํ”„๋ก ํŠธ ๋ฐ์Šคํฌ ์„œ๋น„์Šค๋กœ ์•Œ๋ฆผ ํ‘œ์‹œ์—†์ด ์„œ๋น„์Šค ์„ค์ •

D-clock :

์•„์ด๋””์–ด 1 : API <18, ์ „๊ฒฝ ์„œ๋น„์Šค ์‹œ์ž‘์‹œ ์ง์ ‘ ์ˆ˜์‹ ๋˜๋Š” new Notification()๏ผ›

์•„์ด๋””์–ด 2 : API >= 18, ๊ทธ๋ฆฌ๊ณ  ๊ฐ™์€ id๋ฅผ ๊ฐ€์ง„ ๋‘ ๊ฐœ์˜ ์ „๊ฒฝ ์„œ๋น„์Šค๋ฅผ ๋™์‹œ์— ์‹œ์ž‘ํ•œ ๋‹ค์Œ, ๋‚˜์ค‘์— ์‹œ์ž‘๋œ ์„œ๋น„์Šค๋ฅผ ๋ฉˆ์ถ”์‹ญ์‹œ์˜ค.

//์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ํ”„๋ก ํŠธ ๋ฐ์Šคํฌ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•œ ์ทจ์•ฝ์ ์€ API ๋ ˆ๋ฒจ 25์—์„œ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ ๋ชจ๋‘๊ฐ€ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค!

ํ”„๋ก ํŠธ ๋ฐ์Šคํฌ ์„œ๋น„์Šค๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„์˜ ํ–ฅ์ƒ ์™ธ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ์ž‘์—… ๋ชฉ๋ก์—์„œ ์นด๋“œ๊ฐ€ ์ดˆ๊ณผ๋˜๋ฉด ํ”„๋ก ํŠธ ๋ฐ์Šคํฌ ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(์—…๋ฐ์ดํŠธ : ํ…Œ์ŠคํŠธ ํ›„ AOSP / CM / International์ด Framework ๊ณ„์ธต์„ ์‚ฌ์†Œํ•˜๊ฒŒ ๋ณ€๊ฒฝ ํ•œ ๊ฒƒ์€ Android ์‹œ์Šคํ…œ์—์„œ๋งŒ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๏ผ› EMUI / MIUI๊ฐ€ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์œผ๋ฉด ์นด๋“œ๊ฐ€ ํšก๋ น๋˜๊ณ  ํ”„๋ก ํŠธ ๋ฐ์Šคํฌ ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ ํ•œ ํ›„์— ํฌ๋กœ์Šค ์นด๋“œ์˜ ๋™์ž‘์€ ๊ตญ์ œ ์ œ์กฐ์—…์ฒด์˜ ์‹œ์Šคํ…œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.)

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๊ฐ€ ์ค‘์ง€๋˜๊ณ  ๋‚˜์ค‘์— ๋‹ค์‹œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค (onStartCommand๋Š” START_STICKY๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค).

์ „๊ฒฝ ์„œ๋น„์Šค์™€ ๋ฐฐ๊ฒฝ ์„œ๋น„์Šค๊ฐ€ ๊ต์ฐจ๋˜๋ฉด ์ฝœ๋ฐฑ์€ onTaskRemoved ๋ฉ”์†Œ๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

onDestroy ๋ฉ”์†Œ๋“œ๋Š” ์„ค์ • -> ๊ฐœ๋ฐœ์ž ์˜ต์…˜ -> ์‹คํ–‰์ค‘์ธ ์„œ๋น„์Šค์—์„œ ์„œ๋น„์Šค๊ฐ€ ์ค‘์ง€ ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋‹ค์‹œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

2. ์„œ๋น„์Šค์˜ onStartCommand ๋ฉ”์†Œ๋“œ์—์„œ START_STICKY๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3. ์„œ๋น„์Šค์˜ onDestroy / onTaskRemoved ๋ฉ”์†Œ๋“œ๋ฅผ ๋ฎ์–ด ์“ฐ๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ ํ•œ ๋‹ค์Œ ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

4. 8 ๊ฐœ์˜ ์‹œ์Šคํ…œ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ ์ฒญ์ทจ :

CONNECTIVITY_CHANGE, USER_PRESENT, ACTION_POWER_CONNECTED, ACTION_POWER_DISCONNECTED, BOOT_COMPLETED, PACKAGE_ADDED, PACKAGE_REMOVED.

๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์†Œํ”„ํŠธ์›จ์–ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ / ์ œ๊ฑฐ ํ•  ๋•Œ ์‚ฌ์šฉ์ž ํ™”๋ฉด์˜ ์ž ๊ธˆ์ด ํ•ด์ œ๋˜๊ณ  ์ „์›์ด ์—ฐ๊ฒฐ / ์—ฐ๊ฒฐ ํ•ด์ œ๋˜๊ณ  ์‹œ์Šคํ…œ ์‹œ๋™์ด ์™„๋ฃŒ๋˜๊ณ  ์„œ๋น„์Šค๊ฐ€ ๋Œ์–ด ์˜ฌ๋ ค์ง‘๋‹ˆ๋‹ค.

์ด ์„œ๋น„์Šค๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ Service๊ฐ€ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ด๋ฉด ๋‹ค์‹œ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

5. ๋ฐ๋ชฌ ์„œ๋น„์Šค๋ฅผ ์ผœ์‹ญ์‹œ์˜ค : ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์‹คํ–‰ ์ค‘์ด ์•„๋‹ˆ๋ฉด ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

6. ๋ฐ๋ชฌ์€ ๊ตฌ์„ฑ ์š”์†Œ์˜ ํ™œ์„ฑํ™” ๋œ ์ƒํƒœ๋ฅผ ๊ฐ์‹œํ•˜์—ฌ MAT์™€ ๊ฐ™์€ ๋„๊ตฌ์— ์˜ํ•ด ๋น„ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋„๋กํ•ฉ๋‹ˆ๋‹ค

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ„์˜ 2 ๊ฐœ์˜ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ตฌํ˜„ ์ฆ๊ฐ€ :

+ ๋ฐ๋ชฌ ์„œ๋น„์Šค : Android 5.0 ์ด์ƒ์€ JobScheduler๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ AlarmManager๋ณด๋‹ค ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

JobScheduler๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ Force Stop ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์ง€๋งŒ AlarmManager๋Š” ํ’€์—…์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Android 4.4 ์ดํ•˜๋Š” AlarmManager๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

+ ์‚ฌ์šฉ ์‹œ๊ฐ„ Observable : Android ์‚ฌ์šฉ์ž ์ •์˜ ์‹œ์Šคํ…œ ์‚ฌ์šฉ ์•ˆ ํ•จ JobScheduler / AlarmManager ๊นจ์šฐ๊ธฐ ๊ฐ„๊ฒฉ์ด ์•ˆ์ •์ ์ด์ง€ ์•Š์Œ

+์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์‹œ๊ฐ„ ์ดˆ๊ณผ ๋œ ์›จ์ดํฌ ์—…์„ ์ทจ์†Œํ•˜๋Š” ๋น ๋ฅธ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

+ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ Job / Alarm / Subscription ์„ ์ทจ์†Œํ•˜๋Š” ๋ฐ”๋กœ ๊ฐ€๊ธฐ ์ถ”๊ฐ€ (๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ ์ž‘์—…)

+ ๊ตญ๋‚ด ๋ชจ๋ธ์˜ ์ ์‘๋ ฅ ํ–ฅ์ƒ : Huawei ๋ชจ๋ธ์ด ๋Œ์•„ ์˜ค๋Š” ํ‚ค๋ฅผ ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋˜๋Œ๋ ค ๋†“๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ ๋œ ํ›„ ๋ช‡ ์ดˆ ๋™์•ˆ ํ™”๋ฉด์„ ์ž ๊ทธ์ง€ ์•Š๋„๋กํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ชจ๋ธ : Huawei Glory 6 Plus (EMUI 4.0 Android 6.0)์—์„œ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ด€์ฐฐ ๋œ :

ํ—ˆ์šฉ ๋ชฉ๋ก์ด ์—†์œผ๋ฉด ๋’ค๋กœ ๋‹จ์ถ”๋ฅผ ๋ˆŒ๋Ÿฌ ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ„ ๋‹ค์Œ ํ™”๋ฉด์„ ์ž ๊ทธ๋ฉด ๋ช‡ ์ดˆ ํ›„์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.๏ผ›

๊ทธ๋Ÿฌ๋‚˜ ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด ํ™ˆ ๋‹จ์ถ”๋ฅผ ๋ˆŒ๋Ÿฌ๋„ ํ™”๋ฉด์ด ์ž ๊ฒจ ์žˆ์–ด๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

( ์—…๋ฐ์ดํŠธ : ํ…Œ์ŠคํŠธ ํ›„, EMUI ์‹œ์Šคํ…œ์—์„œ ํ™”๋ฉด์ด ์ž ๊ฒจ ์žˆ์–ด๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์šฉ ์นด๋“œ ๋งŒ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น ํ™”๋ฉด์˜ ์ฒซ ๋ฒˆ์งธ ํ™”๋ฉด์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ํŽ˜์ด์ง€ ์ด์ƒ์œผ๋กœ ํ‘ธ์‹œ๋˜๋ฉด ์ž ๊ฒจ์ง‘๋‹ˆ๋‹ค. ํ™”๋ฉด์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฃฝ์ผ ๋ช‡ ์ดˆ ํ›„, ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ๊ฐ€์ž… ํ•œ ํ›„ ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜จ ๋‹ค์Œ ํ™”๋ฉด์„ ์ž ๊ทธ๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

๋”ฐ๋ผ์„œ onBackPressed ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ Activity finish / destroy ๋Œ€์‹  ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋งŒ ๋ฐ˜ํ™˜๋˜๋„๋ก ๋‹ค์‹œ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ชจ๋ธ : Redmi 1S 4G (MIUI 8 Android 4.4.2)๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ด€์ฐฐ ๋œ ::

ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ํ™”๋ฉด์„ ์ž ๊ทธ๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์นด๋“œ๊ฐ€ ์ž˜๋ฆฐ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ๋” ์ด์ƒ ์‹œ์ž‘๋˜์ง€ ์•Š์œผ๋ฉฐ ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์นด๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์„œ๋น„์Šค๊ฐ€ ์ค‘์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ CM์˜ ๋™์ž‘๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ํ‚ต ์–ผ๋ผ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋ฅผ ํ—ˆ์šฉ ๋ชฉ๋ก์œผ๋กœ ์œ ๋„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ• ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

+ Intent ์‚ฌ์šฉ

  • Android Doze ํŒจํ„ด
  • ํ™”์›จ์ด ์ž์ฒด ๊ด€๋ฆฌ
  • ํ™”์›จ์ด ์ž ๊ธˆ ํ™”๋ฉด ์ •๋ฆฌ
  • ๋ฐ€๋ ˆ ์…€ํ”„ ์Šคํƒ€ํŠธ ๊ด€๋ฆฌ
  • ๊ธฐ์žฅ ์ˆจ๊ฒจ์ง„ ๋ชจ๋“œ
  • ์‚ผ์„ฑ 5.0 / 5.1 ์ž์ฒด ์‹คํ–‰ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ
  • Samsung 6.0+ ๊ฐ๋…๋˜์ง€ ์•Š์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ด€๋ฆฌ Meizu ์ž๊ธฐ ๊ด€๋ฆฌ ์‹œ์ž‘ Meizu ๋Œ€๊ธฐ ์ „์› ๊ด€๋ฆฌ
  • Oppo ์ž์ฒด ์‹œ์ž‘ ๊ด€๋ฆฌ
  • Vivo์˜ ๋ฐฐ๊ฒฝ์—์„œ ๋†’์€ ์ „๋ ฅ ์†Œ๋น„
  • Kai์˜ Jin Li ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ
  • ์ง„๋ฆฌ ๊ทธ๋ฆฐ ๋ฌด๋Œ€ ๋’ค
  • LeTV ์…€ํ”„ ์Šคํƒ€ํŠธ ๊ด€๋ฆฌ
  • LeTV ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณดํ˜ธ
  • ์ฟจ ์Šคํƒ€ํŠธ ๊ด€๋ฆฌ
  • Lenovo ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ด€๋ฆฌ
  • Lenovo ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ „๋ ฅ ์ตœ์ ํ™”
  • ZTE ์ž๋™ํ™” ๊ด€๋ฆฌ
  • ZTE ์ž ๊ธˆ ํ™”๋ฉด์œผ๋กœ ๋ณดํ˜ธ ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ€์†ํ™”

android.support.v7.AlertDialog๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๋„๋ก ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

+ ๋ฐ๋ชฌ ์„œ๋น„์Šค์™€ BroadcastReceiver๋Š” : watch ์„œ๋ธŒ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋˜๊ณ , ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค์™€ ๊ตฌ๋ถ„๋œ๋‹ค.

+ AIDL ๋˜๋Š” ๋‹ค๋ฅธ IPC ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์™€ ํ†ต์‹  ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์ž‘์—… ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃผ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Poweramp๋ฅผ ์ฐธ์กฐํ•˜๋ฉด, ์‹œ์ž‘๋œ ํฌ ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋Š” UI์™€ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

+ ๋ฐ˜๋ณต๋˜๋Š” ์‹œ์ž‘ ์„œ๋น„์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ž„์˜๋กœ startService(Intent i)

์„œ๋น„์Šค๊ฐ€ ์•„์ง ์‹คํ–‰ ์ค‘์ด๋ฉด ์•„๋ฌด ์ž‘์—…๋„ํ•˜์ง€ ๋ง๊ณ  ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ด ์•„๋‹ˆ๋ฉด ์œ„๋กœใ€‚

+ ํ•˜์œ„ ์Šค๋ ˆ๋“œ์—์„œ ์˜ˆ์•ฝ ๋œ ์ž‘์—… ์‹คํ–‰, ์‚ฌ์ „ ์‹คํ–‰ ๊ฒ€์‚ฌ ๋ฐ ํŒŒ๊ดด ์ค‘์— ์ €์žฅ๋œ ๋ฌธ์ œ ์ฒ˜๋ฆฌ

์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € ๋””์Šคํฌ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ญ์ œ๋˜๋Š” ๋™์•ˆ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ๋””์Šคํฌ์— ์ €์žฅํ•˜์‹ญ์‹œ์˜ค

์†Œ๊ฐœํ•˜๋‹ค

1. ๋ฐ”์ด๋„ˆ๋ฆฌ ์ถ”๊ฐ€

build.gradle ์ถ”๊ฐ€

compile 'com.xdandroid:hellodaemon:+'

2. ์ƒ์† ๋œ AbsWorkService, 6 ๊ฐœ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„

/**
 * ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์„œ๋น„์Šค ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
 * @return ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค., true; ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค., false; ํŒ๋‹จ ํ•  ์ˆ˜ ์—†๋‹ค, null.
 */
Boolean shouldStopService();

/**
 * ์ž‘์—…์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๊นŒ?
 * @return ์ž‘์—…์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค., true; ์ž‘์—…์ด ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค., false; ํŒ๋‹จ ํ•  ์ˆ˜ ์—†๋‹ค., null.
 */
Boolean isWorkRunning();

void startWork();

void stopWork();

//Service.onBind(Intent intent)
@Nullable IBinder onBind(Intent intent, Void unused);

//์„œ๋น„์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ˜ธ์ถœ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
void onServiceKilled();

Manifest์— ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

3. Application ์‚ฌ์šฉ์ž ์ •์˜

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ onCreate ()์—์„œ ํ˜ธ์ถœ ๋จ

DaemonEnv.initialize(
  Context app,  //Application Context.
  Class<? extends AbsWorkService> serviceClass, //๋ฐฉ๊ธˆ ์ž‘์„ฑํ•œ ์„œ๋น„์Šค์˜ Class ์˜ค๋ธŒ์ ํŠธ
  @Nullable Integer wakeUpInterval);  //ํƒ€์ด๋ฐ ์›จ์ดํฌ ์—… ๊ฐ„๊ฒฉ (ms), ๊ธฐ๋ณธ๊ฐ’์€ 6 ๋ถ„์ž…๋‹ˆ๋‹ค.

Context.startService(new Intent(Context app, Class<? extends AbsWorkService> serviceClass));

Manifest์—์„œ android : name์„ ํ†ตํ•ด ์ด ์‚ฌ์šฉ์ž ์ •์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

4. API ์ง€์นจ

Service ์‹œ์ž‘ :

Context.startService(new Intent(Context c, Class<? extends AbsWorkService> serviceClass))

Service ์ค‘์ง€ :

AbsWorkService๋ฅผ ํ™•์žฅํ•˜๋ ค๋ฉดstopService ()๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค :

1.shouldStopService ()๊ฐ€true๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ์œ ์ง€ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์กฐ์ž‘ํ•˜์‹ญ์‹œ์˜ค;

  1. ํƒ€์‚ฌ SDK์—์„œ ์ œ๊ณตํ•˜๋Š” API ๋‚˜ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ค‘์ง€ํ•˜์‹ญ์‹œ์˜ค.

  2. AbsWorkService.cancelJobAlarmSub ()์„ ํ˜ธ์ถœํ•˜์—ฌ Job / Alarm / Subscription์„ ์ทจ์†Œํ•˜์‹ญ์‹œ์˜ค.

์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•˜๋ ค๋ฉด extends AbsWorkService์—์„œstopService ()๋ฅผ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ์ฒ˜๋ฆฌ :

๋‹ค์Œ API๋Š” ๋ชจ๋‘ IntentWrapper์— ์žˆ์Šต๋‹ˆ๋‹ค. :

List<IntentWrapper> getIntentWrapperList();

//์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ํ—ˆ์šฉ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๋„๋ก ์•ˆ๋‚ดํ•˜๋Š” android.support.v7.AlertDialog ํŒ์—….
void whiteListMatters(Activity a, String reason);

//Huawei ๋ชจ๋ธ์ด ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ํ•ฉ๋ฅ˜ํ•˜์ง€ ๋ชปํ•˜๋„๋กํ•˜๋ ค๋ฉด ๋’ค๋กœ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐ”ํƒ• ํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ ๋œ ํ›„ ๋ช‡ ์ดˆ ๋™์•ˆ ํ™”๋ฉด์„ ์ž ๊ธ‰๋‹ˆ๋‹ค.
//MainActivity.onBackPressed ()๋ฅผ ์žฌ์ • ์˜ํ•˜์—ฌ ๋‹ค์Œ API์— ๋Œ€ํ•œ ํ˜ธ์ถœ ๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค.
void onBackPressed(Activity a);

์„œ๋น„์Šค๊ฐ€ ๋” ์ด์ƒ ํ•„์š” ์—†์œผ๋ฉด ์‚ฌ์šฉ์ž์˜ ์ „์›์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ดAbsWorkService.cancelJobAlarmSub ()```์„ ํ˜ธ์ถœํ•˜์—ฌ ์Šค์ผ€์ค„ ๋œ ์›จ์ดํฌ ์—… Job / Alarm / Subscription,์„ ์ทจ์†Œํ•˜๊ณ stopService () ''๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ๋ฐ ๋ฉ”๋ชจ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages