我有一个android应用程序a)在一个线程中执行updateData()函数(查询来自互联网的内容提供程序和HTTP请求),以及b)有一个主屏幕小部件,每次执行相同的updateData()函数30分钟(不在线程中)。由于应用程序和小部件之间的死锁导致的ANR?
一)看起来是这样的:
public class MoodMain extends Activity{
public void onCreate(...)
{
Thread t = new Thread()
{
public void run()
{
updateData(this);
}
};
t.start();
}
B)是这样的:
public class MoodAppWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, ...)
{
updateData(context);
} }
现在人们是报告在线程中了updateData(上下文)停在同一地点ANR的,一个线程为a)和b)。堆栈跟踪如下所示:
1日例如:
“主” PRIO = 5 TID = 1个的原生| group =“main”sCount = 1 dsCount = 0 s = N obj = 0x40025ad8 self = 0xcd80 | sysTid = 23053 nice = 0 sched = 0/0 cgrp = default handle = -1345017808 | schedstat =(5672943129 29267974835 13299)在android.os.BinderProxy.transact(本机方法)在 android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:370) 在 android.content.ContentProviderProxy.query(ContentProviderNative.java :408) ...
“Thread-10”prio = 5 tid = 9 NATIVE | group =“main”sCount = 1 dsCount = 0 s = N obj = 0x4629ba88 self = 0x2d1750 | sysTid = 23062 nice = 0 sched = 0/0 cgrp = default handle = 2955408 | schedstat =(53100602 8822875969 600) 在android.os.BinderProxy.transact(本机方法)在 android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:370) 在 android.content.ContentProviderProxy.query(ContentProviderNative.java :408) 在android.content.ContentResolver.query(ContentResolver.java:245)...
第二示例:
“主” PRIO = 5 TID = 1个NATIVE | group =“main”sCount = 1 dsCount = 0 s = N obj = 0x40020a30 self = 0xcd88 | sysTid = 19319 nice = 0 sched = 0/0 cgrp =默认句柄= -1345026000 at java.net.InetAddress.getaddrinfo(Native Method) java.net.InetAddress.lookupHostByName(InetAddress.java:508)at java.net.InetAddress.getAllByNameImpl(InetAddress.java:280)在 java.net.InetAddress.getByName(InetAddress.java:310)在 java.net.InetSocketAddress。(InetSocketAddress.java:110)...
“Thread-10”prio = 5 tid = 9 NATIVE | group =“main”sCount = 1 dsCount = 0 s = N obj = 0x458842e8 self = 0x245cc0 | sys.did = 20153 nice = 0 sched = 0/0 cgrp = default handle = 2388904 at java.net.InetAddress.getaddrinfo(Native Method)at java.net.InetAddress.lookupHostByName(InetAddress.java:508)...
“Thread-8”prio = 5 tid = 7 NATIVE | group =“main”sCount = 1 dsCount = 0 s = N obj = 0x45867030 self = 0x22c528 | sysTid = 20151 nice = 0 sched = 0/0 cgrp = default handle = 2277944 at java.net.InetAddress.getaddrinfo(Native Method)at java.net。InetAddress.lookupHostByName(InetAddress.java:508)... at com.admob.android.ads.id(AdMobURLConnector.java:153)at com.admob.android.ads.ba(AdRequester.java:206)at com.admob.android.ads.AdView $ b.run(AdView.java:655)
看起来像某种任务的僵局。任何想法如何解决这个人请吗?