문제

나는 Digiclock Widget이라는 Android 시장에서 위젯을 가지고 있었고, 마지막 업데이트 후 Rooted Motorola 드로이드에 대해 매우 드물고 무작위로 문제가 발생했습니다 (문제가있는 다른 핸드셋이있을 수 있지만 유일한 응답 I '. VE는 루트 드로이드 사용자로부터 온 것입니다). 문제는 진행 상황이 발사되는 AsyncTask를 실행하는 활동이 시작될 때 발생합니다. 적용 가능한 Java 코드 파일은 여기에서 찾을 수 있습니다.

http://code.google.com/p/android-digiclockwidget/source/browse/trunk/src/com/davidgoemans/simpleclockwidget/launcherchooser.java

작업 버전과 비 작업 버전 간의 변경 사항을 차별하려면 여기에서 찾을 수 있습니다.

http://code.google.com/p/android-digiclockwidget/source/diff?spec=svn10&old=7&r=9&format=side&path=/trunk/src/com/davidgoemans/simplecleckwidget/launcherchooser.java

드로이드에서 발생하는 것 같습니다.

응용 프로그램을 가져 오는 아스 동기식처럼 보입니다. 이게 가능해?

감사합니다, 데이비드

편집하다:

문제를 발견했습니다. Android 2.0에서 (2.1 또는 1.6이 아님)

목록 패키지 = getPackagemanager (). getInstalledPackages (packagemanager.get_activities);

내 상황에서 충돌하지만

목록 패키지 = getPackagemanager (). getInstalledPackages (0);

그렇지 않습니다.

도움이 되었습니까?

해결책 2

문제를 발견했습니다, Android 2.0에서 (2.1 또는 1.6이 아님)

List packages = getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);

내 상황에서 충돌하지만

List packages = getPackageManager().getInstalledPackages(0);

그렇지 않습니다. 2.0 에뮬레이터에서 테스트하여 이것을 찾았습니다. 이것은 프린지 케이스 대신 1.5, 1.6, 2.0 및 2.1에서 내 앱을 테스트해야한다는 고통을 더합니다.

다른 팁

그것이 증상의 원인인지 확실하지 않지만 코드의 몇 가지 문제를 볼 수 있습니다.

  • UI 객체가 스레드 안전하지 않기 때문에 기본 UI 스레드를 제외한 모든 스레드에서 진행 상황에서 UI 객체를 조작해서는 안됩니다. ProgressDialog.setProgress ()를 호출하는 대신 asynctask.publishprogress ()를 호출 한 다음 asynctask.onprogressupdate ()를 재정의하십시오.

http://developer.android.com/resources/articles/painless-threading.html

  • 또한 코드는 두 스레드가 "메뉴 엔트리"에 동시에 액세스하는 것을 방지하지 못합니다. 이 부분을 수정하는 가장 간단한 방법은 호출을 oncreate ()에서 onpostexecute ()에서 setListAdapter ()로 옮기는 것입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top