shared preferences

앱을꺼도 데이터를 남기고 싶을때 

shared preferences - 내부 하드디스크에 저장하는 기술

앱은 스스로의 shared preferences가 있다

이런 값을 public으로 저장했다면 다른앱에 데이터 공유할 수 있다

웹브라우저의 쿠키개념과 비슷하다

하지만 앱을 지우거나 휴대폰을 바꿀 때 사라지므로 DB에 데이터를 저장하는 것이 좋다

 

 

 

 

 

 

종료시 저장

 

 

시작시 가져오기

 

 

 

 

------------------

 

 

안드로이드 생명주기

 

책 277

 

ctrl + o

 

 

 

 

앱을 처음 켜면

 

 

 

 

 

 

앱을 다시 선택하면

 

 

앱을 끄면

 

체류시간은 onStart부터 onRestart까지로 잡으면됨

 

중요

시작! - onCreate

정지 - onPause

다시돌아올때 - onResume

종료할때 - onDestroy

 

더보기
package com.jaybon.lifecycleex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Main_Activity";

    private String downloadData = ""; // 다운로드 데이터로 가정한다
    private String currentState = "";



    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");

        currentState = "에너지 50";
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");

        Log.d(TAG, "onResume: 현재 에너지는 "+currentState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 다운로드 시작
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    for(int i=1; i<4; i++){
                        Thread.sleep(1000);
                        Log.d(TAG, "run: "+i+"초");
                    }
                    downloadData = "다운받은 데이터";
                    Log.d(TAG, "run:  다운로드 종료");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        Log.d(TAG, "onCreate: ");
    }
}

 

 

 

------

 

액티비티 매니저 서비스

 

안드로이드 OS

포그라운드 앱 - 선택했을 경우에만 뜸

서비스 앱 (백그라운드 앱) - 서비스는 데몬으로 돈다

 

일반OS는 프로그램을 실행시키면 프로세스가 된다

즉 각각 다 작동되고 있는 상태이다

안드로이드OS는 액티비티 매니저 서비스 라는 앱이 있고 이 것이 모든 앱들을 관리한다

즉 안드로이드는 프로세스가 하나다

다른 앱들을 켜면 액티비티 매니저 서비스에서 관리하게 된다

화면에 보이는 앱들은 작동되고 화면 뒤로 간 앱들은 중지상태가 된다
(중지상태가 된 앱들은 메모리자원을 적게 차지하고 앱의 정보만 들고 있게된다- 이것을 context라고 한다)

contextId

다른앱으로 전환하면 컨텍스트 스위칭이 일어난다

앱들끼리는 매니저를 통해서 통신할 수 있다

 

--------------

앱은 스스로 액티비티 컨텍스트를 관리한다

A1.this

getContext()

getApplicationContext()

---------------

 

--------------------------

TASK - 액티비티가 쌓이는 것

기본적으로 페이지이동시 액티비티를 날리고(finish), 데이터를 남기고 싶을 경우에는 종료를 시키지 않는다

 

TASK 설정에 따라 같은 액티비티가 뜨면 이전의 액티비티를 날릴 수 있다

 

------------------------

 

Intent

Intent를 간단히 생각하면

트럭이라고생각하면된다

출발지와 목적지를 알려주고 내용을 싣는다

번들객체 - 오브젝트를 싣는 곳

 

입력시  put을 사용한다

 

 

 

 

 

shift 따닥

바이트로 바꾼다! (직렬화)

 

 

 

 

 

 

메인액티비티

 

 

안드로이드 내부에서는 데이터 전송시 Bundle을 사용하면 된다

 

--------------------------

 

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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Hello World!" />

    <Button
        android:id="@+id/btn_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button" />
    
</LinearLayout>

 

 

 

 

MainActivity

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Main_Activity";

    private TextView tv1;
    private Button btn1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv1 = findViewById(R.id.tv_1);
        btn1 = findViewById(R.id.btn_1);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv1.setText("안녕하세요");
            }
        });

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'App > Android' 카테고리의 다른 글

안드로이드 // TASK  (0) 2020.07.28
안드로이드 // intent / bundle  (0) 2020.07.28
안드로이드 // shared preferences  (0) 2020.07.27
안드로이드 // 생명주기  (0) 2020.07.27
안드로이드 // intent  (0) 2020.07.27

 

------

shared preferences

앱을꺼도 데이터를 남기고 싶을때 

shared preferences - 내부 하드디스크에 저장하는 기술

앱은 스스로의 shared preferences가 있다

이런 값을 public으로 저장했다면 다른앱에 데이터 공유할 수 있다

웹브라우저의 쿠키개념과 비슷하다

하지만 앱을 지우거나 휴대폰을 바꿀 때 사라지므로 DB에 데이터를 저장하는 것이 좋다

 

 

 

 

 

 

종료시 저장

 

 

시작시 가져오기

 

 

 

 

------------------

 

'App > Android' 카테고리의 다른 글

안드로이드 // intent / bundle  (0) 2020.07.28
안드로이드 // 버튼 클릭과 리스너  (0) 2020.07.28
안드로이드 // 생명주기  (0) 2020.07.27
안드로이드 // intent  (0) 2020.07.27
안드로이드 // 롬복 라이브러리 추가  (0) 2020.07.27

 

안드로이드 생명주기

 

책 277

 

ctrl + o

 

 

 

 

앱을 처음 켜면

 

 

 

 

 

 

앱을 다시 선택하면

 

 

앱을 끄면

 

체류시간은 onStart부터 onRestart까지로 잡으면됨

 

중요

시작! - onCreate

정지 - onPause

다시돌아올때 - onResume

종료할때 - onDestroy

 

더보기
package com.jaybon.lifecycleex01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "Main_Activity";

    private String downloadData = ""; // 다운로드 데이터로 가정한다
    private String currentState = "";



    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");

        currentState = "에너지 50";
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");

        Log.d(TAG, "onResume: 현재 에너지는 "+currentState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 다운로드 시작
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    for(int i=1; i<4; i++){
                        Thread.sleep(1000);
                        Log.d(TAG, "run: "+i+"초");
                    }
                    downloadData = "다운받은 데이터";
                    Log.d(TAG, "run:  다운로드 종료");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        Log.d(TAG, "onCreate: ");
    }
}

 

 

 

------

+ Recent posts