2011-08-10 2 views
0

a) 스레드에서 updateData() 함수 (인터넷에서 콘텐츠 공급자 및 HTTP 요청 쿼리)를 수행하고 b) 동일한 updateData() 함수를 모두 수행하는 홈 스크린 위젯이 있습니다. 30 분 (스레드가 아님).앱과 위젯의 교착 상태로 인해 ANR이 발생합니까?

는) 다음과 같습니다 : 사람들이 스레드 때문에 updateData (문맥)에 같은 장소에 정지 ANR 수를보고하는

이제
public class MoodAppWidgetProvider extends AppWidgetProvider { 
    public void onUpdate(Context context, ...) 
    { 
     updateData(context); 
    } } 

, 하나 개의 스레드 :

public class MoodMain extends Activity{ 
    public void onCreate(...) 
    { 
     Thread t = new Thread() 
     { 
      public void run() 
      { 
        updateData(this); 
      } 
     }; 
     t.start(); 
    } 

b)는 다음과 같습니다 a)와 b)에 대해. |

"주"프리 오 = 5 TID = 1 NATIVE :

1 예 : 스택 트레이스는 다음과 같이 그룹 = "main"sCount = 1 dsCount = 0 s = N obj = 0x40025ad8 self = 0xcd80 | sysTid = 23053 nice = 0 sched = 0/0 cgrp = 기본 핸들 = -1345017808 | schedstat = (29,267,974,835 13,299 5,672,943,129) android.content.ContentProviderProxy.query에서 android.content.ContentProviderProxy.bulkQueryInternal (ContentProviderNative.java:370) 에서 android.os.BinderProxy.transact (네이티브() 메소드에서 ContentProviderNative.java : 408) ...

"Thread-10"prio = 5 tid = 9 네이티브 | group = "main"sCount = 1 dsCount = 0 s = N obj = 0x4629ba88 self = 0x2d1750 | sysTid = 23062 nice = 0 sched = 0/0 cgrp = 기본 핸들 = 2955408 | schedstat = (53,100,602 8,822,875,969 600) android.content.ContentProviderProxy.query에서 android.content.ContentProviderProxy.bulkQueryInternal (ContentProviderNative.java:370) 에서 android.os.BinderProxy.transact (원시 메소드)에 (ContentProviderNative.java : 408) android.content.ContentResolver.query (ContentResolver.java:245)에서 ...

예 2 :

"메인"프리 오 = 5 TID = 1 NATIVE | group = "main"sCount = 1 dsCount = 0 s = N obj = 0x40020a30 self = 0xcd88 | sysTid = 19319 멋진 = 0 예정 : = 0/0 CGRP = 기본 핸들 = -1345026000 java.net.InetAddress.lookupHostByName (InetAddress.java:508)에서 java.net.InetAddress.getaddrinfo (기본 방법)에서 에서 java.net.InetAddress.getAllByNameImpl java.net.InetSocketAddress에서 java.net.InetAddress.getByName (InetAddress.java:310)에서 (InetAddress.java:280). (InetSocketAddress.java:110) ...

"Thread-10"prio = 5 tid = 9 고유 | group = "main"sCount = 1 dsCount = 0 s = N obj = 0x458842e8 self = 0x245cc0 | sysTid = 20153 멋진 = 0 예정 : = 0/0 CGRP = 기본 핸들 = 2388904 java.net.InetAddress.lookupHostByName에서 java.net.InetAddress.getaddrinfo (기본 방법) (InetAddress.java:508)에서 ...

"Thread-8"prio = 5 tid = 7 네이티브 | group = "main"sCount = 1 dsCount = 0 s = N obj = 0x45867030 self = 0x22c528 | sysTid = 20151 nice = 0 sched = 0/0 cgrp = 기본 핸들 = 2277944 at java.net.InetAddress.getaddrinfo (네이티브 메소드) java.net.InetAddress.lookupHostByName (InetAddress.java:508) ... 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)

는 작업 교착 상태의 일종처럼 보인다. 이 아이디어를 해결하는 방법을 알려주세요.

답변

0

나는 widgetProvider의 onUpdate() 함수에서 긴 프로세스를 수행하고 있다는 사실이 문제라고 생각합니다. 집중적 인 기능을 수행하기 위해 스레드를 생성하도록 코드를 수정했으며, 지금까지 더 이상 사용자의 고정이보고되지 않았습니다.

관련 문제