Java 根Droid上的AsyncTask出现问题
我在Android市场上有一个叫做DigiClock widget的小部件,在上次更新之后,我在植根的Motorola Droids上遇到了一些极其罕见和随机的问题(可能还有其他手机存在这个问题,但我得到的唯一回应是植根的droid用户)。当启动一个活动,该活动运行一个异步任务,该任务在显示ProgressDialog(水平样式)的同时从设备检索所有已安装的应用程序时,就会出现问题。可在此处找到适用的java代码文件: 如果您希望区分工作版本和非工作版本之间所做的更改,可在此处找到: 机器人身上发生的事情似乎是: *进度框弹出 *进度框在完成运行之前将被解除 *空列表出现 似乎获取应用程序的异步任务正在被终止。这可能吗 谢谢, 大卫 编辑: 发现问题后,发现在Android 2.0中(不是2.1或1.6) List packages=getPackageManager().getInstalledPackages(PackageManager.GET_活动) 在我的情况下崩溃了,但是Java 根Droid上的AsyncTask出现问题,java,android,root,Java,Android,Root,我在Android市场上有一个叫做DigiClock widget的小部件,在上次更新之后,我在植根的Motorola Droids上遇到了一些极其罕见和随机的问题(可能还有其他手机存在这个问题,但我得到的唯一回应是植根的droid用户)。当启动一个活动,该活动运行一个异步任务,该任务在显示ProgressDialog(水平样式)的同时从设备检索所有已安装的应用程序时,就会出现问题。可在此处找到适用的java代码文件: 如果您希望区分工作版本和非工作版本之间所做的更改,可在此处找到: 机器人
List packages = getPackageManager().getInstalledPackages(0);
List packages=getPackageManager().getInstalledPackages(0)
不会。我不确定这是否是症状的原因,但我可以看到代码存在一些问题:
- 除了主UI线程之外,您不能从任何线程操作UI对象,如ProgressDialog,因为UI对象不是线程安全的。调用AsyncTask.publishProgress()而不是调用progressDialog.setProgress(),然后重写AsyncTask.onProgressUpdate()
- 此外,您的代码不会阻止两个线程同时访问“menuEntries”。修复此部分的最简单方法是将对setListAdapter()的调用从onCreate()移到onPostExecute()
- 除了主UI线程之外,您不能从任何线程操作UI对象,如ProgressDialog,因为UI对象不是线程安全的。调用AsyncTask.publishProgress()而不是调用progressDialog.setProgress(),然后重写AsyncTask.onProgressUpdate()
- 此外,您的代码不会阻止两个线程同时访问“menuEntries”。修复此部分的最简单方法是将对setListAdapter()的调用从onCreate()移到onPostExecute()
List packages = getPackageManager().getInstalledPackages(0);
没有。我通过在2.0模拟器中测试发现了这一点。这增加了我现在必须在1.5、1.6、2.0和2.1上测试应用程序的痛苦,而不仅仅是边缘情况://发现了问题,结果是在Android 2.0(不是2.1或1.6)上 在我的情况下崩溃了,但是
List packages = getPackageManager().getInstalledPackages(0);
没有。我通过在2.0模拟器中测试发现了这一点。这增加了我现在必须在1.5、1.6、2.0和2.1而不是边缘情况下测试我的应用程序的痛苦://你没有异步任务终止时的日志?我无法访问发生异步任务的设备,所以基本上我是用我的用户的话。你没有异步任务被终止时的日志吗?我没有访问发生异步任务的设备的权限,所以基本上我是用我的用户的话。哇,谢谢。我没有意识到ProgressDialog也受到了影响。我今晚会试试看是否管用。哇,谢谢。我没有意识到ProgressDialog也受到了影响。我今晚会试试看是否有效。