안드로이드/개념
[Android] Do It! 안드로이드 도전 08. 세 개 이상의 화면 만들어 전환하기 -> 액티비티와 프래그먼트로 구현해보기
Do It! 안드로이드 도전 08. P.259 문제 원래는 액티비티들로 구현하라고 나와있지만 프래그먼트도 사용해서 구현을 해 보겠다. 로그인 액티비티 - 메인 액티비티-(메인메뉴 프래그먼트, 고객 관리, 상품 관리, 매출 관리 프래그먼트)로 만들어 보겠다. 유저의 정보를 나타내는 User 클래스이다. 필수적인 것은 아니고, 그냥 데이터 바인딩에서 쓸 클래스이다. 이제 본격적으로 액티비티 관련한 파일들을 살펴보겠다. 로그인 액티비티 xml version="1.0" encoding="utf-8"?> 로그인 화면의 레이아웃 파일에서는 DataBinding을 이용해서 User 클래스를 태그에 로 넣었다. 그리고 양방향 데이터 바인딩을 사용해서 EditText 값이 바뀔때마다 자동으로 User 클래스의 값도 바뀌..
[Android] Do It! 안드로이드 도전 07. 로그인 화면과 메뉴 화면 전환하기
Do It! 안드로이드 도전 07. P.258 문제 로그인 액티비티와 메인 메뉴 액티비티로 나누어서 구현했다. 요즘 화면 구성은 액티비티 보다는 프래그먼트를 많이 사용하는 추세이다. 그래도 도전 문제의 의도가 ActivityForResult()를 사용하는 것이므로 액티비티 두 개를 사용해서 풀었다. AndroidManifest.xml파일을 수정해서 MAIN 액티비티를 로그인 액티비티로 수정해서 앱을 실행했을 때 로그인 액티비티가 나오도록 구현했다. ActivityResultLauncher 객체를 사용해서 onCreate에서 초기화를 진행했다. 콜백 메서드로 결과코드가 9001이라면 토스트 메시지로 메뉴 이름이 나오게 했다. 어려운 부분은 없으므로 넘어가겠다. 메인 액티비티에서 볼 부분은 버튼을 클릭했을 ..
[Android] SharedPreferences 사용하기
앱에서 간단한 데이터를 저장 또는 복원할 때 SharedPreferences를 사용할 수 있다. 이 기능은 앱 내부에 파일을 하나 만들어서 파일에서 데이터를 저장하거나 읽어올 수 있도록 한다. 개발자는 파일에 접근할 필요는 없고 SharedPreferences의 저장과 복원 메서드를 사용하면 된다. 원래는 Application()을 상속받은 전역 어플리케이션 클래스를 만들어서 그 안에 companion object로 SharedPreferences 객체를 하나 생성한 후 모든 클래스 파일에서 사용할 수 있도록 한다. sharedPreferences 객체를 이용해서 앱을 종료하고 다시 실행했을 때도 저장돼 있는 데이터를 화면에 띄우도록 해보겠다. 생명주기를 이용해보면, onPause()에서 데이터를 저장해..
[Android] 액티비티의 생명주기
안드로이드 시스템은 실행중인 앱의 상태를 직접 관리한다. 이는 앱이 독립적이게 될 경우, 메모리를 과도하게 점유하거나 권한을 과도하게 갖는 것을 방지하는 용도이다. 멀티태스킹을 지원하는 안드로이드의 경우 시스템이 계속해서 모니터링할 필요가 있다. 실행한 액티비티 위에 다른 액티비티가 생성되면, 액티비티는 액티비티 스택에 넣어서 보관하게 된다. 즉 이는 한 액티비티가 다른 액티비티의 상태에 영향을 미칠 수 있음을 의미한다. ex.) 게임 앱을 하던 중 전화가 와서 전화 앱이 최상단에 위치하는 경우 따라서 액티비티는 실행, 중지, 메모리에서 해제되는 여러 과정의 상태 정보를 가지고 있다. 실행(Running) : 화면상에 액티비티가 보이는 형태. 액티비티 스택의 최상위에 위치한다. 일시 정지(Paused) ..
[Android] 태스크 관리
앱은 하나의 프로세스 위에서 동작한다. 프로세스가 하나 실행되고 그 위에 가상 머신(Virtual Machine)이 만들어지고, 이 가상 머신 위에서 앱이 실행이 된다. 그러나 인텐트의 액션 데이터의 MIME타입으로 전화 앱을 실행시킬 수 있었다. 이 전화 앱 역시 다른 프로세스 위에서 실행하게 된다. 전화 앱에서 뒤로가기 버튼을 누르면 원래 앱으로 돌아올 수 있어야 하는데, 프로세스 끼리는 정보공유가 어렵다. 그래서 앱에서는 태스크(Task)가 만들어진다. 태스크는 앱이 어떻게 동작할지 결정할 때 사용된다. 태스크를 이용하면 프로세스처럼 독립적인 실행 단위와 상관없이 어떤 화면들이 같이 동작해야 하는지 흐름을 관리하는 것이 가능하다. ex.) A 액티비티에서 B 액티비티(전화 앱)을 실행하면 태스크가 ..
[Android] 플래그와 부가 데이터 - feat. Parcelable과 양방향 데이터 바인딩 사용
액티비티를 만들때 보통 Intent를 생성해서 startActivity를 이용해 띄우게 된다. 같은 액티비티가 여러번 띄워지게 되면 중복해서 띄워지게 되는데, 이런 문제는 플래그를 이용하면 해결할 수 있다. 플래그 플래그는 액티비티가 처리되는 방식을 이해해야 이해가 가능하다. 액티비티는 액티비티 매니저라는 객체에 의해 액티비티 스택에서 관리가 된다. 액티비티가 스택에 쌓이고 상위에 있던 액티비티가 사라지면 그 다음 액티비티가 보여지는 방식으로 관리가 된다. 액티비티 매니저가 관리하는 액티비티는 다음 종류와 같다. 화면에 띄워지는 액티비티 (현재 실행중인 액티비티) 스택에 쌓이는 액티비티 (실행중이였다가 정지되는 액티비티) 동일한 액티비티가 여러 번 생성돼서 스택에 들어가는 것 등을 막는 것이 플래그라는 ..
[Android] 인텐트, Intent
안드로이드에서는 다른 액티비티를 화면에 띄우거나 기능을 동작시킬 때, 그리고 데이터를 전달할 때 인텐트를 사용했다. 시스템은 인텐트에 들어있는 명령을 확인하고 다른 액티비티, 혹은 다른 앱을 띄우는 것이다. 인텐트는 개발자가 만든 앱 구성 요소가 해야 할 일을 지정하는 역할을 한다. 인텐트는 android.content 패키지 안에 정의되어있다. 인텐트는 앱 구성 요소 간 작업 수행을 위한 정보를 전달한다. 다른 앱 구성 요소에 인텐트를 전달하는 메서드는 다음과 같다. startActivity() : 액티비티 시작 startActivityForResult() Deprecated -> ActivityResultLauncher 객체의 launch() + registerForActivityResult() st..
[Android] 화면 여러개 만들어서 화면 전환하기 - onActivityResult, startActivityForResult Deprecated. registerForActivityResult 사용해보기
화면 전환은 액티비티를 전환하는 것으로 이루어진다. (물론 요즘은 프래그먼트를 이용해서 많이 전환한다.) 그렇다고 액티비티만 안다고 안드로이드 앱을 잘 구성할 수 있는 것은 아니다. 안드로이드의 앱 구성 요소에는 네 가지가 있는데 액티비티는 그 중 한 개일 뿐이다. - 안드로이드 앱 구성요소 네 가지 1. 액티비티 2. 서비스 3. 브로드캐스트 수신자 4. 내용 제공자 앱을 단말에 설치했을 때, 안드로이드 시스템이 이 구성요소 네 가지에 대한 정보를 앱에 요구한다. 이 구성요소들에 대한 정보는 앱 프로젝트에 있는 AndroidManifest.xml 파일에 존재한다. 액티비티 같은 경우 이 파일에 ... 태그로 추가해야 새로 만든 액티비티를 화면에 보여줄 수 있다. 액티비티를 시작하는 방법은 두 가지가 있..
[Android] 레이아웃 인플레이션
안드로이드에서는 화면 구성이 두 가지로 나뉘어져 있다. XML 레이아웃 파일 : 화면의 UI구성 소스 코드 파일 : 화면에서 기능을 담당 이 때, 어떤 XML 레이아웃 파일이 어떤 소스 코드 파일로 기능하는지 어떻게 알 수 있을까? 안드로이드 스튜디오로 프로젝트를 새로 만들 때, Override된 OnCreate메서드에는 자동으로 추가되는 것이 있다. setContentView(R.layout.activity_main) (물론 요즘엔 Data Binding해서 쓰긴 하지만 어쨌든 최초로 만들었을 땐 이렇다.) 이 메서드가 XML 레이아웃 파일과 소스 코드 파일을 연결해 주는 것이다. (이 메서드는 MainActivity 파일이 상속받는 AppCompatActivity에 존재하는 것이다.) 매개변수에서 대..
[Android] Do It! 안드로이드 도전 04. SMS 입력 화면 만들고 글자의 수 표시하기 + 데이터 바인딩, 뷰 모델, 라이브 데이터로 풀어보기
Do It! 안드로이드 p.151 도전 04. 문제 editText의 addTextChangedListener를 사용하면 되는 도전 문제 였다.물론 이렇게 할 수도 있지만, 데이터 바인딩과 라이브 데이터를 이용해서도 한번 풀어보았다. 우선 editText의 addTextChangedListener를 사용해서 풀면 다음과 같다. 우선 레이아웃 구조를 살펴보자면 다음과 같다. 제약 레이아웃을 사용한 구조이다. background로 사용한 drawable이 있는데 그냥 검은색 네모칸을 위해 만들어 놓았다. TextView도 하나 만들어 놓아서 바이트 수를 표기할 것이다. 버튼은 두 개를 만들어 놓았고 수평구조를 이루게 레이아웃 선을 선정해 놓았다. EditText의 addTextChangedListener를 ..