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

안드로이드 앱 프로그래밍

임시 이미지 정재곤
http://www.boostcourse.org/mo316/notice/2606
좋아요 1439 수강생 20255
아래의 글은 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()가 불린 후에는

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

​

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

화면이 없어질 때,

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

​

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

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. 화면 내비게이션으로 돌아오겠습니다.

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