l 안드로이드 4대 컴포넌트
액티비티
액티비티는 화면을 구성하는 가장 기본적인 컴포넌트로 지금까지 계속 액티비티를 이용하여 앱을 작성해왔다.
서비스
서비스는 눈에 보이는 화면(액티비티)과 상관없이 백그라운드에서 동작하는 컴포넌트이다. 로컬에서 동작하는 서비스는 다음 세 단계를 거친다.
서비스 생성 -> 서비스 시작 -> 서비스 종료
브로드캐스트 리시버
안드로이드는 여러 응용 프로그램이나 장치에 메시지를 전달하기 위해 방송(broadcasting) 메시지를 사용한다.
예를 들어 배터리가 방전되면 전체 응용 프로그램이 들을 수 있도록 방송 신호를 보낸다 그리고 브로드캐스트 리시버는 이러한 방송 메시지가 발생하면 반응한다. 배터리가 얼마남지 않았을 때 경고 문자나 소리를 발생시키는 기능을 구현할 수도 있다.
콘텐트 프로바이더
콘텐트 프로바이더는 응용 프로그램 사이에 데이터를 공유하기 위한 컴포넌트이다. 안드로이드 응용 프로그램은 데이터에 자신만 접근할 수 있으므로 자신의 데이터를 외부에 공개하려면 콘텐트 프로바이더를 만들어야 한다. 콘텐트 프로바이더의 정보를 제공하는 방법으로는 URI(Uniform Resource Identifier)가 있다. 콘텐트 프로바이더에서 처리된 데이터는 일반적으로 데이터베이스 또는 파일로 저장된다.
l 액티비티 개요
액티비티는 안드로이드폰에 나타나는 화면 하나하나를 말한다. 액티비티는 사용자에게 보여주는 화면을 만들기 때문에 안드로이드의 4대 컴포넌트 중 가장 핵심적인 요소이다. 지금까지 우리가 작성한 응용 프로그램에서는 모두 액티비티를 만들어 사용했는데 하나의 화면만 사용했다. 여기서는 응용 프로그램에 여러 개의 액티비티를 사용하는 방법을 살펴보자.
| 액티비티 추가
Activity_main.xml
Public class MainActivity extends Activity{
@Override
Public void onCreate(Bundel saveInstanceState){
Activity_main.xml말고도 second.xml을 만든다.
second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#f00ff00">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="돌아가기"
android:id="@+id/returnbtn"/>
</LinearLayout>
그 다음 secondActivity.java 파일도 만든다.
secondActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.cookandroid.project10_1.R;
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*second.xml의 돌아가기를 킄ㄹ릭하면 현재 액티비티를 끝내는 코드를 추가한다.*/
setContentView(R.layout.second);
Button returnbtn = (Button)findViewById(R.id.returnbtn);
returnbtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
finish();
}
});
}
}
androidmanifest.xml
<activity android:name=".SecondActivity"/>
Mainactivity.java
package com.cookandroid.project10_1;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button activibtn = (Button)findViewById(R.id.activibtn);
activibtn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
/*인텐트를 생성한다 Intent 생성자의 첫 번째 파라미터 getApplicationContext()는 메인 클래스의 컨텍스트를 반환하는데,
* getApplicationContext()대신에 MainActivity.this라고 써도 된다. 두 번째 파라미터로 이 인텐트에 포함될
* 액티비티(SecondActivity)를 넘겨 주면된다 .class를 붙여야 한다는 것을 주의하자*/
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
/*새로운 액티비티를 화면에 출력하려면 startActivity() 메소드를 사용하는데, 이 메소드는 파라미터를 인텐트 받는다.*/
startActivity(intent);
/*이 다음에는 AndroidManifest.xml 파일을 열고 세컨드 액티비티를 등록한다.*/
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="새 화면 열기"
android:id="@+id/activibtn"/>
</LinearLayout>
l 명시적 인텐트
인텐트는 안드로이드 4대 컴포넌트가 서로 데이터를 주고받기 위한 메시지 객체이다.
명시적 인텐트와 데이터의 전달
명시적 인텐트(explicit intent)는 다른 액티비티의 이름을 명확히 지정할 때 사용하는 방법이다.
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(“tel:/119”));
startActivity(intent);
- 전화를 걸기 위해 URI 문자열을 “tel:전화번호” 형식으로 사용했다. 액션을 ACTION_DIAL로 사용하면 전화 걸기 창이 열린다.
Uri uri = Uri.parse(“tel:01022612747”);
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
- 웹 브라우저를 열기 위해 URI 문자열을 “http://웹 주소"형식으로 사용했다. 액션은 ACTION_VIEW를 사용했다.
Uri uri = Uri.parse(“http://hanbit.co.kr”);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
| 액티비티 생명주기
안드로이드 응용 프로그램은 pc용과 달리 화면이 작으므로 동시에 여러 개의 액티비티(화면)이 나올 수 없다. 즉 응용 프로그램이 여러 개의 액티비티로 작성되어 있다면 앞에 나오는 화면 하나만 활성화된 상태이고 나머지는 모두 비활성화된 상태가 된다.
액티비티의 생명 주기는 액티비티의 생성부터 소멸까지의 주기를 말한다. 응용 프로그램이 시작되면 onCreate(), onStart(), onResume() 메소드가 수행되고 메인 액티비티 화면이 나온다. 이것이 메인 액티비티의 실행 상태이다.
이 상태에서 메인 액티비티를 끌어내면 왼쪽의 onPause(), onStop(), onDestroy() 메소드가 차례로 수행되고 응용 프로그램이 종료된다.
만약 다른 액티비티를 요청하면 오른쪽의 onPause(), onStop() 메소드가 수행되고 메인 액티비티가 중지되며 다른 액티비티 화면이 나온다. 또 다른 액티비티의 사용을 종료하면 onRestart(), onStart(), onResume() 메소드가 수행되고 닷 lap인 액티비티 화면이 나온다.
[관련 게시글]
[Android] 안드로이드 스튜디오 설치 : https://seul96.tistory.com/58 [Android] 바람개비 회전 애니메이션 : https://seul96.tistory.com/62 [Android] 화면터치 시 이미지 따라오기 : https://seul96.tistory.com/310 [Android] 그림 글 배치 : https://seul96.tistory.com/63 [Android] 글의 목록 만들기 : https://seul96.tistory.com/311 [Android] manifests, java, res / 레이아웃 유형 : https://seul96.tistory.com/64 [Android] toast 배경색 변경 방법 + 색상표 : https://seul96.tistory.com/65 [Android] 계산기 구현 : https://seul96.tistory.com/66 [Android] 위치 배열 gravity linear layout relative layout 사용 : https://seul96.tistory.com/67 [Android] 액티비티 전환 intent 예시 + 4대 컴포넌트 : https://seul96.tistory.com/68 [Android] 이벤트 처리와 액티비티간 이동 : https://seul96.tistory.com/70 [Android] 리스트뷰 : https://seul96.tistory.com/79 [Android] 커스텀 리스트뷰 : https://seul96.tistory.com/80 [Android] 안드로이드 공공데이터(API) 사용하는 방법 : https://seul96.tistory.com/85 [Android] Padding/layout_margin, visibility 속성 : https://seul96.tistory.com/312 |
'JAVA > Android' 카테고리의 다른 글
[Android] - 리스트뷰(listview) (0) | 2019.06.02 |
---|---|
[Andorid] 이벤트 처리와 액티비티간 이동 (0) | 2019.05.03 |
[Android] 위치 배열 Gravity vs Layout(Linear|Relative) (0) | 2019.04.29 |
[Android] Calculator(계산기) (0) | 2019.04.29 |
[Android] 토스트(Toast) / 배경색 변경 방법 + 색상표 (0) | 2019.04.29 |
댓글