gpt4 book ai didi

Android Lollipop 应用程序没有响应

转载 作者:行者123 更新时间:2023-11-30 02:20:30 25 4
gpt4 key购买 nike

我的应用程序在 Android 4.4 - 2.3 上运行良好。但我最近将我的 Nexus 7 更新为 Android 5.0.2 (Lollipop) 并且只有在这里我收到错误/ANR。但我不知道为什么。我在这里或网络上找不到任何相关内容。

当我启动 AsyncTask 时出现 ANR .它首先运行良好,5 秒后,UI 线程卡住,我收到很多 ART 运行时错误。下面我列出了一些不断重复的错误行:

02-19 10:12:23.060: A/art(7229): art/runtime/thread_list.cc:170] Thread suspend timeout
02-19 10:12:23.060: A/art(7229): art/runtime/thread_list.cc:170] DALVIK THREADS (27):
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] "ReferenceQueueDaemon" daemon prio=5 tid=7 Waiting
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] | group="system" sCount=1 dsCount=0 obj=0x12c26080 self=0xac59c000
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] | sysTid=7240 nice=0 cgrp=apps sched=0/0 handle=0xac598380
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] | state=S schedstat=( 0 0 0 ) utm=0 stm=2 core=3 HZ=100
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] | stack=0xb421f000-0xb4221000 stackSize=1036KB
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] | held mutexes=
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] at java.lang.Object.wait!(Native method)
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] - waiting on <0x063dedd6> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:133)
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] - locked <0x063dedd6> (a java.lang.Class<java.lang.ref.ReferenceQueue>)
02-19 10:12:23.061: A/art(7229): art/runtime/thread_list.cc:170] at java.lang.Thread.run(Thread.java:818)

同一版本的应用程序在所有其他 API 上运行良好。 Lollipop 是否处理多任务处理和 wait()调用方式不同?

我希望你们中的任何人都可以提供帮助,也许有类似的问题。

谢谢!

编辑 1:结构:

1:点击更新按钮开始AsyncTask它向蓝牙设备发送更新请求并等待任何传入消息

2: 传入消息存储在 MessageQueue 中 (如果这个队列是空的,我调用 wait())

try {
synchronized (myMessages) {
myMessages.wait();
}
} catch (InterruptedException ex) {
return null;
}

3:如果myMessages不为空 -> 它发送更新 IntentBroadcastReceiver更新 ListView

重复此过程,直到用户再次单击 UpdateButton。它工作约 5 秒钟,然后卡住。 AsyncTask 中没有 UI 处理本身。

编辑 2:

在调试时我得到了这个非常奇怪的行为 :D。我会有我的 AsyncTask就像上面描述的那样:它的 doInBackground 方法看起来像这样:

@Override
protected String doInBackground(Void... params) {
while(buttonClicked){
// #POS: HERE IS THE STRANGE BEHAVIOR HAPPENING
if(checkAnCondition){
doWork();
}
}
}

如果我有 AsyncTask在其 while 循环中运行,#POS 处没有任何内容,它会抛出应用程序无响应。在调试过程中,我在这个 #POS 添加了一个 System.out.println("") 语句,然后..应用程序运行良好:D WTF? :D

所以.. 如果 while 语句中的第一件事是 if 条件,为什么应用程序会崩溃?有什么想法吗?

最佳答案

问题是你正在卡住一个线程,它不是主线程,所以你在 ARN 之前有更多的“间隙”,但 5 秒后......Android 抛出错误。

您可以尝试避免永远阻塞每 3 秒检查一次队列的线程(在您的等待语句中使用超时),例如:

try {
while( i have no messages){
synchronized (myMessages) {
myMessages.wait(300);
}
}
} catch (InterruptedException ex) {
return null;
}

我无法重现您的错误,所以...请告诉我是否有帮助。

编辑

我更改了 while 和超时条件。

关于Android Lollipop 应用程序没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28602854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com