2021.03.05

1. ์•กํ‹ฐ๋น„ํ‹ฐ ์ˆ˜๋ช…์ฃผ๊ธฐ

์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์—์„œ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

๋‹จ์ˆœํ™” ํ•˜๋ฉด ์ด 6๊ฐ€์ง€์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜
onCreate->onStart->onResume->onPause->onStop->onDestroy ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ˆˆ์—ฌ๊ฒจ ๋ด์•ผํ•  ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” onResume๊ณผ onPause ์ด๋‹ค.
onResume๊ณผ onPause๋Š” ๊ฐ๊ฐ ํ™”๋ฉด์ด ๋ณด์˜€๋‹ค๊ฐ€ ์•ˆ๋ณด์ผ๋•Œ ์‹คํ–‰๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ๋‘ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ํ™”๋ฉด์ด ์—†์–ด์ง„ ์ƒํƒœ์—์„œ ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ž๋™์ ์œผ๋กœ ํ™”๋ฉด์ด ์—†์–ด์งˆ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ์ ์œผ๋กœ ์ €์žฅํ•ด๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ getSharedPreferences() ๋ฉ”์†Œ๋“œ ์ด๋‹ค.
ํ™”๋ฉด์ด ๋ณด์ด์ง€ ์•Š์„๋•Œ ํ˜ธ์ถœ๋˜๋Š” onPause ๋ฉ”์†Œ๋“œ์—์„œ getSharedPreferences()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ด๋‘๊ณ 

SharedPreferences preference = getSharedPreferences("pref", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preference.edit();
editor.putString(```);
editor.commit(); // commit์„ ํ•ด์ฃผ์–ด์•ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋ฅผ onResume ๋ฉ”์†Œ๋“œ์—์„œ getSharedPreferences() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋‹ค์‹œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋”ฐ. getSharedPreferences() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ญ์ œ๋  ๋•Œ๊นŒ์ง€ ์—†์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

SharedPreferences preference = getSharedPreferences("pref", Activity.MODE_PRIVATE);
if ((preference != null) && (preference.contains("name")) ){
    String name = preference.getString('''); ///name์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
}

2. ์„œ๋น„์Šค

์„œ๋น„์Šค๋ž€, ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ๋‹ฌ๋ฆฌ ํ™”๋ฉด์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋Œ์•„๊ฐ€๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๊ตฌ์„ฑ์š”์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ฆ‰, ํ™”๋ฉด์—†์ด ๋ณด์ด์ง€ ์•Š๋Š” ์˜์—ญ์—์„œ ๋Œ์•„๊ฐ€๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฉ”์‹ ์ € ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ•ญ์ƒ ์ˆ˜์‹ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์•„๋‹Œ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด์•ผ ํ™”๋ฉด์ด ์—†๋Š” ์ƒํƒœ์—์„œ๋„ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

1) ์„œ๋น„์Šค ์‹œ์ž‘

์šฐ์„  ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” **AndroidManifest**์— <service> ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
<service
        android:name=".MyService"
        android:enabled="true"
        android:exported="true"></service>
              

๊ทธ ๋‹ค์Œ ์„œ๋น„์Šค๋ฅผ startService() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ด๋•Œ ์„œ๋น„์Šค์— ์ธํ…ํŠธ๋ฅผ ๋‹ด์•„์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

Intent intent = new Intent(''');
startService(intent);

์„œ๋น„์Šค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” onCreate()๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋ณ„๋‹ค๋ฅธ ๊ณผ์ •์—†์ด onDestroy()๋กœ ์ข…๋ฃŒ๋œ๋‹ค. ์ฒ˜์Œ startService()๋กœ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ์„œ๋น„์Šค๋Š” ๊ณ„์† ์‹คํ–‰๋˜๋‹ค๊ฐ€ stopService() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ ๋•Œ๊นŒ์ง€ ์‹คํ–‰๋œ๋‹ค. ์ค‘๊ฐ„์— ์‹œ์Šคํ…œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์Šค์Šค๋กœ ์ข…๋ฃŒ์‹œํ‚ฌ์ˆ˜๋„ ์žˆ๋‹ค.

2) ์„œ๋น„์Šค ์‹คํ–‰

์„œ๋น„์Šค๋Š” onCreate()๋กœ ๋งŒ๋“ค์–ด์ง„ํ›„, ์‹œ์Šคํ…œ์ด ์„œ๋น„์Šค ํด๋ž˜์Šค์— ์žˆ๋Š” onStartCommand() ์ฝœ๋ฐฑ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.
 public int onStartCommand(Intent intent, int flags, int startId) {
        /// ๋ฐ›์€ intent๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Œ.
    }

3) ์„œ๋น„์Šค์—์„œ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธํ…ํŠธ๋ฅผ ์„ ์–ธํ•ด์„œ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€๊ฐ€๋ฐ์ดํ„ฐ๋กœ ๋„ฃ์–ด์ค€ํ›„์— startActivity()์— ์ธํ…ํŠธ๋ฅผ ๋„ฃ์–ด์„œ ๋ณด๋‚ด์ฃผ๋ฉด ๋œ๋‹ค.
์ด๋•Œ ํ™”๋ฉด์ด ์—†๋Š” ์„œ๋น„์Šค์—์„œ ํ™”๋ฉด์ด ์žˆ๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋ถˆ๋Ÿฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ƒˆ๋กœ์šด Task๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. Task๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” stack์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ธํ…ํŠธ์— FLAG_ACTIVITY_NEW_TASK ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
Intent intent = new Intent(''');
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
showIntent.putExtra(''');

startActivity(showIntent);

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ