3-A 안드로이드 스튜디오 설치
- 토렌트를 깐 것 마냥 컴퓨터가 느려졌다....
3-B 안드로이드 액티비티
- 4개의 중요 컴포넌트: ContentProvider(사진, 주소록 등 데이터), Service(백그라운드), BroadcastReceiver(알림을 도와주주는 역할. 일종의 우체부), Activity(보이는 화면)
- 액티비티: 윈도우의 '창' / 맥의 'finder' / 아이콘 누르면 뜨는 게 액티비티!
- 액티비티가 하는 일 : UI를 보여주고, 행동까지 한다. 그냥 다 한다.
- 액티비티의 생명주기: 그냥 외워야함........
- 액티비티 생성 -> onCreate() [생성 직후. 동작 준비.] -> onStart() [시작 직전] -> onResume() [진짜 완전 직전] -> 액티비티 러닝, 런타임(실제 동작) -> onPause() [조그마한 대화상자 뜰 때 or 전에 있던 액티비티 들어가고, 다음에 나올 액티비티 등장할 때 중간 상태. 일시 정지] -> onStop() [액티비티가 완전히 화면에 안 보인다. 백그라운드로 갔다.] -> onRestart() [앱을 다시 켰다.] or 다시 onCreate()로 [오랫동안 안 돌아왔으면 자동으로] -> onDestroy() [액티비티 꺼짐]
3-C 안드로이드 액티비티 (실습)
- step by step 따라가봤다..
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import android.util.Log;
public class MainActivity extends Activity {
public static final String TAG = "MainActivity";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
- 시점 잡기
3-D 안드로이드 Intent
- Intent : 컴포넌트 간 의사소통 담당. 우편배달부.
- 액티비티와 액티비티 / 앱과 앱 / 편지부터 택배까지 배달해 주는 우편 배달부
- 명시적 Intent : 보낸이와 받는이가 명시되어있음. (액티비티와 액티비티)
- 암시적 Intent : 해당된다 싶으면 다 부름 (앱과 앱)
3-E 안드로이드 Intent (실습)
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
<Button
android:text="CALL"
android:id="@+id/btn_call"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.btn_call);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Click!!", Toast.LENGTH_SHORT).show();
}
}
- CALL 버튼 누르면 'Click!!' 알림
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.btn_call);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
startActivity(intent);
}
}
- CALL 버튼 누르면 전화 앱으로 이동
// actity_call.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".CallActivity">
<TextView
android:textSize="36sp"
android:text="CALL"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.btn_call);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, CallActivity.class);
intent.putExtra("intent-message","game joa joa");
startActivity(intent);
}
}
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class CallActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call);
String message = getIntent().getStringExtra("intent-message");
Toast.makeText(CallActivity.this, message, Toast.LENGTH_SHORT).show();
}
}
- 명시적 intent : CALL 버튼 클릭하면 'game joa joa' 알림
3-F 세번째 세뇌의 시간
- Activity : 안드로이드에서 제일 중요한 클래스. 생명주기를 갖고 있다. onCreate()에서 액티비티 작성 시작.
- Intent : 다른 액티비티를 시작할 수 있게 도와준다 (명시적) / 다른 앱을 실행할 수도 있다 (암묵적) / 자료 넣어 보냄
- Android Studio : Logcat 화면에서 에러 확인 / 에러가 나면 구글 검색 / 공식 홈페이지 활용
'MOBILE > Android' 카테고리의 다른 글
안드로이드 세뇌교실 4 (0) | 2020.10.12 |
---|---|
안드로이드 세뇌교실 2 (0) | 2020.10.11 |
안드로이드 세뇌교실 1 (0) | 2020.10.11 |