로그인 바로가기 하위 메뉴 바로가기 본문 바로가기
난이도
심화

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2606
좋아요 1436 수강생 20099
아래의 글은 BOOSTER 서포터즈로 활동했던 쭈(jy***)님이
작성한 부스트코스 후기입니다.
여러분들의 성원에 더 노력하는 부스트코스가 되겠습니다.
감사합니다.
******************************************
1)링크: https://blog.naver.com/jy364/221815122117
2)작성날짜: 20/02/19
<본문작성>

안녕하세요 :-)

오늘은 지난 시간에 이어서

화면 여러 개 만들기 나머지 부분에 대한 수강후기를 올리려고 합니다!

3. 화면 여러 개 만들기 목차는

1. 화면 전환하기

2. 인텐트 살펴보기

3. 수명주기 이해하기

4. 서비스 사용하기

5. 브로드캐스트 수신자 사용하기

이렇게 나누어져 있었는데

지난 시간에 1,2를 통해

액티비티와 인텐트에 대해 배웠습니다.

혹시 아직 포스팅을 보지 않으신 분들은

다음 링크를 통해 보고 오시면

이번 시간 내용이 더 잘 이해되실 것 같습니다 ㅎㅎ

https://blog.naver.com/jy364/221806836990

[부스트코스] 안드로이드 프로그래밍 3. 화면 여러 개 만들기(1) 수강 후기

안녕하세요. 오늘은 3. 화면 여러 개 만들기 수강 후기를 올리려고 합니다.​1. 화면 전환하기2. 인텐트 살...

blog.naver.com

그러면 이제 나머지 부분인 수명주기, 서비스, 브로드캐스트 수신자에 대해 배워볼까요?


먼저, 액티비티 수명주기에 대해 알아보겠습니다.

액티비티는 안드로이드 시스템에 의해 관리됩니다.

따라서 시스템에 의해 중지되거나 메모리에서 삭제되는 경우가 발생할 수 있습니다.

예를 들어, 여러분이 유튜브를 보고 있었는데 갑자기 친구한테 전화가 오면

통화를 위해 시스템이 알아서 유튜브 앱을 종료시킬 수 있습니다.

이렇게 시스템이 앱을 종료시킨다면,

사용자가 입력했던 데이터나 하고 있던 작업은 모두 사라집니다.

수명주기는 앱의 상태에 맞추어 여러분이 어떤 기능을 동작시키는 코드를 넣을 수 있도록 해줍니다.

이때, 각 상태에 따라서 호출되는 메소드가 다릅니다.

액티비티 수명주기

액티비티 수명주기

onCreate, onStart, onResume 메소드에 의해 액티비티가 화면에서 보이게 되고,

onPause, onStop, onDestroy 메소드에 의해 액티비티가 화면에서 사라집니다.

종료될 때 onPause()가 호출되어서 액티비티가 사라지게 되면

onResume()를 불러서 액티비티를 다시 화면에 보이게 할 수 있습니다.

onStop()가 호출되어서 액티비티가 사라지게 되면

onRestart()->onStart()->onResume()을 불러서 액티비티를 다시 화면에 보이게 할 수 있습니다.

그러나, onDestroy()가 불린 후에는

액티비티를 끝낼 작업을 이미 마쳤기 때문에 소멸한 후에 앱을 처음부터 다시 시작해야 합니다.

수명주기 메소드가 자동 호출되도록 만들어서

화면이 없어질 때,

사용자가 입력했던 데이터나 종료 전에 상태 정보를 복구할 수 있도록 합니다.

onPauseonResume 메소드를 통해 데이터를 임시로 저장했다가 복구할 수 있도록 합니다.

onPause 메소드는 데이터를 저장해둡니다.

데이터는 SharedPreferences를 이용하여 저장할 수 있습니다.

SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString( "name", "mike"); editor.commit();

onResume 메소드는 데이터를 복구하여 화면에 보이게 합니다.

SharedPreferences pref = getSharedPreferences("pref", Activity.MODE_PRIVATE); if ((pref != null) && (pref.contains("name")) ){ String name = pref.getString("name", ""); nameInput.setText(name); }

그러면 이제 서비스에 대해 알아볼까요?

서비스란?

화면 없이 백그라운드에서 실행되는 하나의 단위입니다.

서비스를 사용할 때는 매니페스트 파일에 <service> 태그를 사용합니다.

서비스는 startService 메소드를 호출하여 시작됩니다.

서비스도 onCreate와 onDestroy 메소드가 있어서

메모리에 만들어 지 때와 메모리에서 없어질 때 자동 호출됩니다.

서비스

서비스로 명령을 전달하고 싶을 때는

startService 메소드 대신 onStartCommand 메소드를 사용하면 됩니다.

다음 코드에서 볼 수 있듯이

새로운 서비스 클래스를 정의할 때는

onCreate, onStartCommand, onDestroy 메소드를 재정의합니다.

public class MyService extends Service { @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate() 호출됨."); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand() 호출됨."); return super.onStartCommand(intent, flags, startId); } }

서비스에서 액티비티로 데이터를 전달할 때는

인텐트를 사용하여 인텐트 안에 부가 데이터를 넣어 보냅니다.

Intent showIntent = new Intent(getApplicationContext(), MainActivity.class); showIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); showIntent.putExtra("command", "show"); showIntent.putExtra("name", "mike"); startActivity(showIntent);

화면이 없는 서비스에서 화면이 있는 액티비티를 띄울 때는

태스크(Task)를 새로 만들어서 연결해야 합니다.

때문에 FLAG_ACTIVITY_NEW_TASK 플래그를 추가해주게 되는데

일반적인 경우 세 개의 플래그를 같이 사용합니다.

액티비티가 화면에 보인 상태에서

위와 같이 startActivity를 호출하면

액티비티는 새로 만들어지지 않고 기존 액티비티를 그대로 사용하게 됩니다.

@Override protected void onNewIntent(Intent intent) { processIntent(intent); super.onNewIntent(intent); }

그리고 액티비티의 onNewIntent 메소드가 자동으로 호출됩니다.

그러면 이제 브로드캐스트 수신자에 대해 알아볼까요?

브로드캐스트 수신자란?

방송을 받고 반응하는 컴포넌트입니다.

안드로이드에서는 SMS 메세지가 브로드캐스트 수신자에 해당합니다.

브로드캐스드 수신자도 사용하기 위해서는 매니페스트 파일에

<receiver>태그를 이용하여 추가해야 합니다.

이 태그 안에 <intent-filter>태그를 이용하여

어떤 브로드캐스팅 메세지를 받고 싶은지 지정할 수 있습니다.

<receiver android:name=".SmsReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>

sms 수신 과정

SMS메세지를 받을 때는 onReceive 메소드를 재정의합니다.

메세지를 수신하면 이 메소드가 자동으로 호출됩니다.

public class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.i(TAG, "onReceive() 메소드 호출됨."); } }

onReceive메소드를 통해

화면이 없는 브로드캐스트 수신자로 받았기 때문에

액티비티 쪽으로 전달한 후에 화면에 보여주어야 합니다.

또한 메니페스트 파일 안에 SMS 수신 권한인 RECEIVE_SMS을 추가해야 합니다.

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

지금까지 액티비티 수명주기, 서비스, 브로드캐스트 수신자에 대해 배웠습니다.

그럼 다들 복습 열심히 하시고

다음 시간에 4. 화면 내비게이션으로 돌아오겠습니다.

*********************************************