본문 바로가기

MOBILE/Android

안드로이드 세뇌교실 3

 

겜팔이

겜팔이의 심심함 해소용

www.youtube.com

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