본문 바로가기

Android/Basic

(28)
[Android] Socket 통신 예제 최신 글(kotlin) 보러가기 - 20.09.28 업데이트 - 2-tier C/S 모델 : 서버와 클라이언트가 1대1로 연결되어, 요청 응답 주고받음- 3-tier 모델- 서버를 좀 더 유연하게 구성- 응용서버와 데이터서버로 구성하는 경우로, 데이터베이스를 분리시킴.- 중간에 있는 서버를 애플리케이션 서버 또는 미드웨어라고 함 1. 소켓 연결을 위한 socket 객체 생성2. 데이터를 쓰기 위한 스트림 객체를 만들고 데이터 쓰기3. 데이터를 읽기 위한 스트림 객체를 만들고 데이터 읽기 환경은 동일 단말 0. 서버, 클라이언트 매니페스트에 인터넷 권한 추가 1. 서버 애플리케이션(서비스)void onCreate() { // 초기화 되는 시점. 스레드 실행 super.onCreate(); ServerThr..
[Android] AsyncTask AsyncTask 는 API 30 부터 Deprecate 되었습니다. 공식문서 참고 스레드를 사용하여 UI를 변경하고 싶다면, 메인스레드에 붙어있는 핸들러에게 요청해야한다는 것을 이미 알고있다.Runnable 객체, post 메소드를 이용해서 좀 더 간단하게 구현하는 방법도 있다.하지만, 여전히 복잡하고 코드가 길어 해석하는데에 어려움이 있다. 핸들러를 사용하는 코드가 복잡하게 느껴지는 이유는, 스레드 안에서 실행되어야할 코드와 UI 접근을 위한 코드가 각각 다른 위치에서 구현해야하기 때문이다. 이러한 혼란스러움을 해결하기 위한 방법은 바로 AsyncTask! AsyncTask는 하나의 클래스 안에 스레드로 동작하는 부분과 화면을 갱신하는 부분을 함께 구현해놓을 수 있다.이 때문에 스레드를 사용하는 하나..
[Android] Thread와 handler 그리고 Runnable 안드로이드 애플리케이션이 실행되면, 하나의 프로세스로 동작한다.프로세스 안에는 여러가지 작업으로 분할되어 스레드들이 동시에 작업을 수행한다.사용자가 직접 스레드를 생성하여 작업을 분할시켜 수행할 수 있다. 안드로이드 애플리케이션은 메인 스레드라는 것이 전체적인 UI 관리 담당 앱의 기본적인 작업들을 수행하고 있다. 표준 자바의 경우, 스레드는 교착상태와 같은 일이 발생하지 않는 경우 알아서 수행된다. 하지만 안드로이드는 다르게 개발자가 직접 제어해주어야한다. 스레드를 생성하여 직접 UI를 동시에 접근하고자 할 때 다음과 같은 에러가 발생한다.android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that crea..
[Android] Navigation drawer (바로가기 메뉴) - DrawerLayout : 다른 레이아웃이나 다른 뷰를 담을 수 있는 레이아웃 중 하나- include 태그 : 중복되는 xml 레이아웃 그대로 집어넣기.- NavigationView : 바로가기 메뉴의 화면 레이아웃(사용자 프로필, 메뉴들 보이는 레이아웃) 0. navigation drawer는 대부분 모든 화면에 적용. 액티비티로 구성한다면 모든 레이아웃에 적용시켜야하기 때문에 엄청난 중복이 발생함. 그래서 모든 화면을 fragment로 구성하는 것이 바람직한 방법. 1. 액션바 없애기- styles.xml 에서 테마 추가- manifest 에서 테마 변경 2. 레이아웃 구조- DrawerLayout- - CoordinatorLayout- - - AppBarLayout- - - - Toolbar-..
[Android] ViewPager + TitleStrip(타이틀스트립) 뷰페이저를 슬라이드하면 알아서 위에있는 타이틀이 바뀐다.저것이 바로 타이틀스트립!이번 부스트코스 강의를 보고 처음 들어본것이다. - 타이틀스트립 기능 : 현재 보여지고 있는 화면이 전체 프래그먼트 중 어느 것인지 알 수 있음. 타이틀스트립은, 뷰페이저 안에 child view로 선언 가능하다. 그리고 어떤 텍스트를 보여줄지는 뷰페이저 어댑터 클래스에서 getPageTitle 메소드만 오버라이드 해주면 된다. @Nullable @Override public CharSequence getPageTitle(int position) { return (position + 1) + "번째탭"; } 그럼 끝! 다음으로 탭스트립이다. 타이틀스트립과 디자인이 약간 다르다.그리고 차이점은 클릭하면 탭처럼 전환된다는 것. ..
[Android] ViewPager + Tab 사진 크기 지못미.. 이번에 들은 강의는 탭 만들기. 예전에 막 하다가 해본 것 같은데, 이번 강의를 들으면서 다시 정리해보려고한다. 위 캡쳐에 보이는 것 처럼, 액션바 밑에 탭이 있는데 탭을 누르면 화면이 전환되는 기능을 구현할 것이다. 자세히 공부한적은 없지만, 탭 부분도 하나의 레이아웃인줄 알고있었다.하지만 그게 아니라, 액션바 밑에 붙이는 것이었다. (어째 프리뷰에서 안보이더라) 지난번 포스팅에서와 같이 액션바를 직접 커스텀하는걸 했었는데, 마찬가지로 탭도 그냥 액션바에 붙여주기만 하면 되는것이다.이를 구성하기 위해서는 외부라이브러리를 추가해주어야한다.build.gradle에서implementation 'com.android.support:design:27.1.1'을 추가해주면 되지만, 딸깍딸깍으..
[Android] Time to String 및 시간순으로 정렬하기 거창하게 Time to String 이라고 했지만... 그냥 방금, 몇분전, 몇시간전 나타내주는 거 구현하는 방법이다. # 시간(long)을 String으로 만들어 줄 클래스 만들기. package com.onedelay.mymovie.utils; public class TimeString { public static final int SEC = 60; public static final int MIN = 60; public static final int HOUR = 24; public static final int DAY = 30; public static final int MONTH = 12; public static String formatTimeString(long regTime) { long c..
[Android] Action Bar 1. 액션바 옵션메뉴 추가하기 (1) res 디렉토리에 'menu' 디렉토리 생성. * 이름은 꼭 menu로 해야 메뉴 레이아웃 생성 가능. (2) menu 디렉토리에 menu_main.xml 파일 생성. (3) 메인 액티비티에 onCreateOptionsMenu() 메소드 오버라이드.@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } (4) 옵션 메뉴 클릭 이벤트 처리@Override public boolean onOptionsItemSelected(MenuItem item) { // 메뉴아이템 클릭시 호출, 파라미터는 선택된 메뉴아이..