목록Android (8)
제이슨의 개발이야기
okhttp를 통해서 서버와 통신 객체를 만들고 실행 하다가 갑작스럽게 android.os.NetworkOnMainThreadException 이 떠서 당황스러운 적이 있습니다 이 오류가 뜨는 이유는 메인 쓰레드 에서 통신을 했기 때문에 발생한 오류 입니다 안드로이드 스튜디오 4.0 버전 부터는 메인 쓰레드 에서 통신을 하는 것을 막아 놨기 때문에 다른 스레드를 이용 해서 통신을 해야 합니다! 이전 버전에서는 메인 쓰레드로 그냥 통신 하더라도 Exception 이 발생 하지 않았지만 사실 통신은 메인 쓰레드로 할 경우 많은 문제가 발 생 할 수 있어 4.0 버전 부터는 막아놓았습니다 ! 이 오류를 해결하기위해 Rx 자바 라이브러리를 이용한다던가 혹은 AsyncTask 클래스를 이용하거나 코틀린 같은 경우..
안드로이드에서 서비스는 백그라운드에서 실행되는 프로세스를 의미합니다. 액티비티와 다른 점은 화면이 없다는 것인데 화면이 없다는 것을 제외하면 사실상 애플리케이션의 구성요소로서 액티비티 처럼 동작한다고 생각할 수 있다 그리고 서비스도 애플리케이션의 구성요소이므로 새로 만든 후에는 항상 매니페스트 파일에 등록해야 하며 메인 액티비티 에서 서비스를 시작하고 싶으면 startService() 메소드를 이용해 시작할 수 있습니다 위의 이미지는 5초마다 로그를 찍는 서비스이다 즉 어플리케이션을 사용하면서 자동으로 5초 마다 로그를 찍는것이다 서비스는 Service 클래스를 상속하여 정의할 수 있습니다 그리고 Runnable 인터페이스를 구현하여 run() 메소드로 스레드가 실행되도록 하였습니다! 여기서 onCrea..
fromFuture() Future 인터페이스 역시 자바 5에서 추가된 동시성 API로 비동기 계산의 결과를 구할 때 사용합니다 보통 Executor 인터페이스를 구현한 클래스에 Callable 객체를 인자로 넣어 Future 객체를 반환합니다 get() 메소드를 호출하면 Callable 객체에서 구현한 계산 결과가 나올 때 까지 블로킹 됩니다 Callable 인터페이스의 call() 메소드는 인자가 없으므로 ()->{} 형태로 나타냈습니다 실행 결과는 1초 쉬고 Hello Future 가 출력됩니다! 참고로 Executors 클래스는 단일 스레드 실행자(SingleThreadExecutor) 뿐만 아니라 다양한 스레드풀(FixedThreadPool, CachedThreadPool) 을 지원합니다 하지만..
제가 오늘 격었던 에러 이슈입니다! 안드로이드 개발 중 패키지 관리를 위해서 기존에 Ui 클래스 들을 Ui패키지를 새로 만들고 Ui패키지에 클래스 관리를 하려구 했는대 빌드 해보니깐 이렇게 오류가 났습니다 ㅠㅠ 처음에는 제가 xml 에서 ViewModel 의 경로를 잘못 입력 해서 그런거라고 생각하여 type = "com.test.testproject.Ui.login.LoginViewModel 로 수정 했는대도 불구하고 오류가 났습니다 ㅠㅠ 개속 별의별 짓을 다 해보다가 Ui 패키지 명을 ui패키지로 바꾸고 했는대 드디어!! 정상적으로 작동이 되더라구요 ㅠㅠ 저 개인적인 생각으로는 ViewModel과 데이터 바인딩하는 과정에서 패키지명이 대문자가 있을 경우 오류가 발생되는 것으로 예상하고 있습니다!! 혹..