개발바닥곰발바닥
반응형
[Android] 안드로이드 작업 스레드에서 UI 업데이트
Android 2021. 12. 8. 19:24

안드로이드 Worker Thread에서 UI Thread 실행하기 안드로이드에서 메인스레드가 아닌 스레드에서 UI 를 업데이트하면 예외가 발생하므로 반드시 UI 업데이트는 메인스레드에서 해줄 필요가 있다. 그런데 만약에 Worker Thread에서 중간에 UI를 업데이트해야 한다면 어떻게 해야할까? 방법은 여러가지인데 크게 컨텍스트에 액세스 할 수 있는가 없는가와, Activty 클래스 내부에 있는지를 확인한다. MainActivity 클래스 내부에 있는 경우 MainActivity.this.runOnUiThread(new Runnable()) { @override public void run() { //UI 업데이트 } } 백그라운드 스레드에 Context 객체가 있는 경우 Handler mainHan..

article thumbnail
[Android] 안드로이드 센서와 NFC
Android 2021. 12. 4. 02:22

센서 요즘 스마트폰에는 자이로, 근접, 가속도, 조도, 나침반 등의 여러 가지 센서들이 내장되어 있다. 샌서 관리자 클래스 SensorManager 클래스는 장치에 내장되어 있는 센서의 리스트를 제공한다. sensor_manager = (SensorManager)getSystemService(SENSOR_SERVICE); Sensor getDefaultSensor(int type) 주어진 타입에 대한 디폴트 센서를 얻을 수 있다. 센서의 타입 센서로부터 값을 받는 방법 값을 받고 싶은 센서에 리스너를 등록해 놓으면 애플리케이션에서 값을 전달받을 수 있다. SensorEventListener listener = new SensorEventListener() { public void onSensorChang..

article thumbnail
[Android] XML처리와 안드로이드 멀티미디어
Android 2021. 12. 4. 02:18

XML 처리 인터넷을 통하여 전달되는 데이터는 주로 XML 형식으로 html과 비슷한 형태를 띄고 있다. XML 처리 과정은 XML 문서 -> XML 파서 -> DOM 트리 의 과정을 거친다. XML 파서 XML 파서의 종류로는 대표적으로 DOM 파서, SAX 파서, PullParser 파서가 있다. DOM: 요소들을 한 번에 트리 구조로 파싱하여 메모리에 저장하여 언제든지 원하는 요소에 대한 정보를 얻을 수 있다는 장점이 있고, 메모리를 많이 차지한다는 단점이 있다. SAX : 라인 단위로 파싱하기 때문에 메모리의 소모가 적다는 장점이 있고, 지나쳐간 요소의 정보를 얻고 싶으면 다시 파싱해야 한다는 단점이 있다. PullParser : SAX와 유사하지만 원하는 부분까지만 파싱이 가능하다. DOM DO..

[Android] 스레드
Android 2021. 10. 13. 01:41

안드로이드에서의 프로세스와 스레드 애플리케이션이 시작되면 안드로이드 시스템은 새로운 리눅스 프로세스를 생성한다. 기본적으로 애플리케이션 안의 모든 컴포넌트들은 동일한 프로세스의 동일한 스레드로 실행된다. 이 기본적인 스레드를 메인 스레드(main thread)라고 부른다. 프로세스 : 프로세스는 독자적으로 실행이 가능한 환경이다. 프로세스는 자기만의 메모리 공간을 가진다. 각각의 프로세스와 메모리 공간은 분리되어 있다. 스레드 : 스레드는 경량 프로세스라고도 불린다. 스레드를 생성하는 것은 프로세스를 생성하는 것보다 훨씬 부담이 적게들기 때문이다. 스레드들은 프로세스 안에서 존재하고 모든 프로세스에는 적어도 하나의 스레드는 존재한다. 스레드들은 메모리와 파일을 포함하여 프로세스의 모든 자원을 공유한다. ..

[Android] 안드로이드 방송 수신자(Broadcast Receiver)
Android 2021. 10. 7. 21:47

방송 수신자 안드로이드 장치에서는 많은 이벤트들이 발생한다. 배터리가 부족할 수도 있고 네트워크가 끊어질 수도 있는 등의 이벤트들을 통지해주기 위해 방송 수신자(brodcast receiver)라는 메커니즘을 제공한다. 방송 수신자는 애플리케이션을 구성하는 4가지 컴포넌트 중 하나이다. 방송 수신자는 BroadcastReceiver 라는 클래스를 상속받아서 작성하면 된다. 이 때 onReceive()라는 메소드르르 재정의하게 되는데 방송이 수신되면 이 메소드가 호출되므로 여기에 필요한 코드를 넣으면 된다. onReceiver()의 매개변수인 context는 방송 수신자가 실행되는 컨텍스트이고 매개변수 intent를 통하여 방송에 대한 자세한 내용이 전달된다. intent의 액션에 방송의 종류가 들어 있고..

article thumbnail
[Android] 안드로이드 서비스
Android 2021. 10. 7. 21:34

서비스의 종류 시작 타입의 서비스(started service) 액티비티가 startService()를 호출하여서 서비스를 시작 연결 타입의 서비스(bound service) 액티비티가 bindService()를 호출하여서 서비스를 시작 서비스를 사용해야 할지 스레드를 사용해야 할지 결정해야 한다면 다음을 참고해서 결정하면 된다. 서비스는 사용자가 애플리케이션과 상호작용하고 있지 않더라도 백그라운드에서 실행되는 컴포넌트이다. 따라서 백그라운드에서도 작동하게 하는 것을 원하는 것이라면 서비스를 사용하면 된다. 반대로 사용자가 애플리케이션과 상호작용하고 있는 동안에만 메인 스레드 외부에서 작업을 하는 것이 필요하면 새로운 스레드를 생성하는 것이 바람직하다. 서비스의 생애주기 서비스의 생애주기는 시작 타입의 ..

article thumbnail
안드로이드 스튜디오 자동완성 대소문자 구분 없애기
Android 2021. 10. 7. 19:25

Visual Studio 나 Eclipse 같은 다른 IDE는 자동 완성이 대소문자 상관없이 작동했는데, Android Studio에서는 대문자면 대문자로, 소문자면 소문자로 타이핑해야 자동완성이 뜨길래 너무 불편해서 찾아본 결과 아주 간단하게 해결할 수 있는 문제였다. File -> Settings -> Editor -> General -> Code Completion에서 Match case 항목을 체크해제 해주면 대소문자 구분 없이 자동완성이 아주 잘되는걸 확인할 수 있다.

article thumbnail
안드로이드 스튜디오 보라색 배경 해결법
Android 2021. 10. 7. 19:08

안드로이드 개발 공부를 하고 있는데 계속 버튼 배경이 보라색으로 지정되길래 열심히 찾아본 결과 res의 themes.xml에서 앱 테마가 MaterialComponents로 설정되어 있기 때문이었다. 해결방법은 간단하다. 1. res->values->theme->themes.xml 파일을 연다. 2. themes.xml 3번 째 줄의 parent를 Theme.AppCompat.Light 로 수정해준다.

반응형