안드로이드 프로그래밍[JAVA Code] 27

Thread : information

[안드로이드 스레드]에서 설명한 내용 중에서 메인 스레드와 관련된 내용을 간단히 정리해볼까요? 스레드란, 프로세스 내에서 "순차적으로 실행되는 실행 흐름"의 최소 단위를 말합니다. 프로그램의 main() 함수로부터 시작되는 최초 실행 흐름 또한 하나의 스레드이며, 이를 메인 스레드라고 부릅니다. 안드로이드 앱에서 메인 스레드는 메시지 큐(Message Queue) 수신을 대기하는 루프를 실행하며, 사용자 입력과 시스템 이벤트, 화면 그리기 등의 메시지가 수신되면 각 메시지에 매핑된 핸들러의 메서드를 실행합니다. 어떠한 경우에 스레드를 사용해야 하는지, 그 판단은, 구현하고자 하는 기능이 메인 스레드와 병행적으로(Concurrently) 실행되어야 하는가를 확인하는 것입니다. 이를 다르게 말하자면, 어떤 ..

Thread : 스레드 와 핸들러

새로운 프로젝트를 만들게 되면 메인 액티비티는 앱이 실행될 때 하나의 프로세스에서 처리된다. 따라서 이벤트 처리나 특정 메서드 기능 구현 할때도 같은 프로세스 안에서 실행된다. 같은 프로세스 안에서 일련의 순서대로 실행 될때, 대부분은 큰문제가 없지만, 대기 시간이 길어지는 네트워크 요청 등의 기능을 수행할 때는 화면에 보이는 UI도 멈춤 상태로 있게 되는 문제가 생길수 있다. 이런 문제를 해결하기 위해 하나의 프로세스 안에서 여러 개의 작업이 동시 수행되는 멀티 스레드 방식을 사용하게 된다. 스레드는 동시 수행이 가능한 작업 단위이다. 하지만 공통 메모리 소스를 나눠 쓰기 때문에 데드락이 발생하여 시스템이 비정상적으로 동작 가능 하다. 데드락이란, 동시에 두 곳 이상에서 요청이 생겼을 때 어떤 것을 먼..

Web View : 내부 사이트

WebServer가 없는 경우, 테스트 할 목적으로 사용하면 좋을듯 하다. 하는 방법은 assets 이라는 디렉토리를 만들고 그안에 .html 파일을 넣는다. 그후 액티비티에서 WebView 를 만들고 세팅하면 보여지게 된다. 설명한 과정을 아래 실습을 통해 보여주겠다. 1) assets 폴더 만들기, 그리고 sample.html 작성하기. 웹페이지 테스트용 웹페이지입니다. 그렇게 테스트 해보고 싶으면 해라 2) mainActivity 에 WebView 추가후 설정 public class MainActivity extends AppCompatActivity { WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { s..

Date & time : date picker and time picker

데이터 객체 와 타임 객체를 하나의 복합객체를 만드는 법을 학습 하므로써 시간 과 날짜 객체 사용법을 익히고 정리하기 위해서 작성해 본다. 1) Date picker 와 Time picker 의 xml 레이 아웃을 정의 한다. 2) PicerView 를 만든다. 다음과 같은 기본 메소드를 오버라이드 한후, init 메소드를 만든다. public class PickerView extends LinearLayout { DatePicker datePicker; TimePicker timePicker; CheckBox checkTimePicker; OnDateTimeChangeListener listener; public PickerView(Context context) { super( context ); in..

선택 위젯 : 스피너 : 기본 Array Adapter 설정

스피너는 선택 위젯으로 다른 선택 위젯과 마찬가지로 Adapter 설정을 해줘야한다. 추가 적으로 스피너는 드랍 박스 식으로 누르면 해당 하는 아이템을 보여주고, 선택 하면 그 선택된 item 을 받을 수 있다. 다음 실습을 통해 스피너에 대한 기본 사용법 을 익혀 보자. 1) XML 안에 스피너 넣기 2) MainActivity 에서 스피너 객체 선언 Spinner spinner; String [] items = {"소녀시대", "티아라","여자친구", "블랙핑크"}; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentVi..

선택 위젯 : 리스트뷰&그리드뷰 : baseAdapter 정의 하기

선택 위젯 이라고 불리는 리스트뷰, 그리드뷰, 리사이클러뷰, 카드뷰 는 모두 baseAdpter 객체를 정의후 setAdapter 를 해줘야 사용이 가능하다. 여기서는 리스트뷰를 만드는 법부터 baseAdpter 객체 정의 하기까지를 정리 해 보도록 하겠다. 1) 메인 엑티비티에 button 하나와 리스트 뷰를 넣는다. 2) 리스트뷰에 들어갈 item.xml 을 만든다. 3) item.xml 을 inflation 시키기 위한 itemView.java 파일을 만든다. public class SingerItemView extends LinearLayout { ImageView imageView; TextView textView; TextView textView2; public SingerItemView(Co..

Animation : sample sliding

안드로이드에서는 화면을 움직이거나 다른 것을 이동 할수 있도록 애니메이션 기능을 제공하고있다. 하는 방법은 res 폴더에 anim 이라는 폴더를 생성 후, 그 안에 움직일 xml 파일을 생성한다. 어디에서 어디로 어떤 크기로 움직일것인지 셋팅 할수있다. 그 후 MainActivity 에서 AnimationUtils.loadAnimation 를 통해서 시점을 완성 할 수 있다. 아래 예시를 보고 실습 해볼수 있다. 1) anim 폴더 만들고 그안에 xml 파일 정의 하기 2) main.xml 파일 정의 하기 : 프래임레이아웃 안에 두개의 레이아웃을 만들고 하나는 배경, 나머지하나는 슬라이딩 가능하도록 id=page라고 줬다. 3) Activity 에서 AnimationUtils.loadAnimation 이..

Intent(bundle)를 통한 데이터 전달 : Serializable and Parcelable

안드로이드 에서 서로다른 Activity 혹은 서버 같은 다른 영역으로 데이터를 보낼때, Intent 를 통해서 보내게 되는데 이때 원시데이터 (String, int , boolen etc) 를 제외하고 복합 데이터 타입 혹은 오브젝트를 보낼때는 데이터 직렬화를 해야한다. Serializable 같은 것은 데이터를 변환하고 보내는데 리소스를 많이 잡아 먹기 때문에 안드로이드에서는 안드로이드에 최적화 되어있는 Parcelable을 권장한다. 하지만 Parcelable은 구성하는데 조금 귀찮은 부분도 있으니, 경우에 따라 적용하면 될것 같다. 1) 기본 ArrayList 타입을 보낼때는 보낼때는 그냥 보내고 받을때만 getSerializableExtra 로 받으면 된다. ArrayList sData = ne..

onSaveInstanceState : 내용 저장하기 Fragment or Activity

안드로이드 기기에서 새로운 화면으로 이동 할때, Fragment 혹은 Activity에 써놓은 값이 리셋 되는것을 방지 하기 위해서 onSavInstanceState를 이용하여 저장 하는 방법이다. 물론 SharedPreferences 혹은 DataBase에 저장하는 방법도 있지만 용도에 따라서 아주 적은 값을 저장할때 사용 하는 방법이 onSaveInstanceState 이다. 1) onSaveInstanceState 를 오버라이드 메소드하고, SaveInstanceState 가 null 이아니면 get으로 값을 복원한다. @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState( outS..