Pages Menu
TwitterRssFacebook
Categories Menu

Posted by on Ago 2, 2019

안드로이드 timertask 예제

우리의 프로젝트의 AndroidManifest.xml은 간단하고 기본입니다 : 안녕하세요 선생님, 나는 30 분마다 작업을 실행하려면 (4 , 4 : 30 , 5 , 5 : 30,…) 나는 그에 대한 타이머가 있습니다. 작업이 30분 을 초과할 수도 또는 초과하지 않을 수도 있습니다. 나는 다음 타이머가 이전의 완료 후 시작됩니다 튜토리얼에서 이해합니다. 그러나 작업 실행 시간에 관계없이 30 분 기간에 작업을 실행하기를 원합니다. 이것에 대한 가능성이 있습니까.? 좋은 대안이지만 스레드 문제가 있습니다. 처리기는 스레드가 아닙니다. 그것은 안드로이드 메시지에 대한 처리기입니다. 메시지를 받으려면 스레드에 있는 루퍼가 필요합니다. 이러한 방식으로 처리기를 만들 때 현재 사용 중인 스레드에 앉아 있는 데, 이는 GUI 스레드일 수 있습니다(bu main activity class라고 하는 경우). TimerTask는 별도의 스레드를 만드는 것입니다.

타이머태스크가 아닌 동안 처리기가 GUI와 동기화되는 이유를 설명합니다. 그러나 별도의 스레드가 필요한 경우 HandlerThread를 만들고 처리기에 해당 루퍼를 사용할 수 있으므로 postDelayed를 호출하고 새로 만든 스레드를 사용할 수 있습니다. 프로젝트에 대 한 코딩 하는 동안 TimerTask에서 gui를 업데이트 하는 모든 시간 작동 하지 않았다 고 특별히 잘 작동 하지 않았다 것으로 나타났습니다. 사실 그것은 기본적으로 일하지 않았고 처음에는 무슨 일이 일어나고 있는지 알 수 없었습니다. 나는 타이머에 디버깅 물건을 넣고 디버그 메시지가 로그에 나타났기 때문에 모든 것이 괜찮은 것처럼 보였습니다. 여전히: gui 전혀 영향을 받지 않았다 그래서 몇 가지 연구와 함께 시작 하 고 같은 효과 가진 많은 사람들을 발견 하지만 단지 몇 가지 답변 (그 ^^ 익숙해의 종류). 그래서 몇 시간 후 나는 안드로이드 개발자에 대한 기사를 발견 : 타이머에서 UI를 업데이트. 저자는 내 것과 비슷한 문제의 종류를 설명하지만 여전히 동일하지 않습니다. 어쨌든, 그는 또한 기본적으로 말하는 “안드로이드 방법”에 대해 이야기하고 있습니다 : 타이머 (작업)는 나쁘다! 안드로이드 방식으로 수행 : 나는 그것을 시도를준 그래서 핸들러 흥미로운 아이디어를 사용하고 지금은 완벽하게 작동 나는 또한 처리기와 같은 물건을 사용하여 더 나은 성능에 대해보고 좀 더 많은 소스를 발견 (나는 다시 보고 몇 가지 링크를 게시 할 수 있습니다). 열기 src/com.javacodegeeks.androidtimertaskexample/AndroidTimerTaskExample.java 파일 아래 코드를 붙여 넣습니다. 이것은 안드로이드 안드로이드타이머태스크예제의 예입니다.

안드로이드에서 타이머와 핸들러는 거의 같은 이유로, 같은 방법으로 사용할 수 있습니다. 말 그대로, 핸들러는 자바 타이머보다 더 나은 방법으로 메모리 누수 문제를 처리하는 네이티브 안드로이드 클래스입니다. 이것이 핸들러가 안드로이드 프로그래머와 프로젝트 사이에서 매우 일반적인 이유입니다. 또한 자바 코드 괴짜 안드로이드 처리기 예제에서 안드로이드 처리기에 대한 자세한 내용을 확인할 수 있습니다. 이클립스 IDE를 열고 파일 → 새로운 → 프로젝트 → 안드로이드 응용 프로그램 프로젝트로 이동합니다. 이 예제에서는 java.util 메서드가 Android에서 고정 기간 또는 고정 비율로 예약된 타이머 되풀이 작업을 처리하는 데 어떻게 도움이 되는지 살펴보겠습니다. 추상 클래스 TimerTask를 사용합니다. 위의 레이아웃에서, 우리는 속성을 사용 했습니다 android:패딩변수를 사용 하 여 바닥 우리가 가지고 싶은 패딩의 값을 나타냅니다:android:paddingBottom=”@dimen/activity_vertical_margin”. 우리의 크기를 설정하기 위해, 안드로이드에서, 우리는 dimens.xml이 있습니다.

이 xml은 res/값/dimens.xml 폴더에 배치해야 합니다. 여기서 는 activity_main.xml 레이아웃의 패딩에 대한 디멘스를 설정합니다. 글쎄, 안드로이드에 대한 잠시 프로그래밍 후 나는 일반적인 자바와 다른 몇 가지 연락을 얻었다. 나는 이미 전에 언급, 나는 안드로이드와 내 경험에 대한 쓰기를 시작하기로 결정했을 때 : 안드로이드 및 메모리 (누수) 자바 타이머 클래스는 스레드 안전하고 여러 스레드는 외부 동기화없이 하나의 타이머 개체를 공유 할 수 있습니다. 타이머 클래스는 java.util.TaskQueue를 사용하여 주어진 일정한 간격으로 작업을 추가하고 언제든지 타이머 작업을 실행하는 스레드가 하나만 있을 수 있습니다(예: 타이머를 만드는 경우 10초마다 실행되지만 단일 스레드 실행은 20초가 걸리는 경우 타이머 개체 큐에 작업을 계속 추가하고 한 스레드가 완료되는 즉시 큐에 알리고 다른 스레드가 실행되기 시작합니다.

Centro per un Futuro Sostenibile via Tacito, 84 00193 Roma tel. +39 06 90288228