2014-11-29 1 views
1

나는 안드로이드 2.3.3에서 완벽하게 실행되지만 안드로이드 4.2에서는 실행되지 않는 코드를 가지고 있습니다. 활동이 시작될 때 AsyncTask을 확장하는 Initialize 클래스의 인스턴스를 호출해야합니다. 하지만 처음 활동 시작 - 작동, 다른 활동으로 돌아갈 때 - progress 회 전자가 회전하고 아무 일도 일어나지 않으며 예외가 발생하지 않습니다. android 4.2에서 비동기 작업의 새 인스턴스를 실행할 수 없습니다.

내가이 문제를 디버깅하는 노력, 그것은 초기화의 새로운 인스턴스의 execute()의 호출에 가서 내 가지 않습니다 Initialize

doInBackground()이 유일한 안드로이드 4.2이나 문제에 문제가 있습니까?

protected void onStart() { 
     super.onStart(); 

     if (orders != null) { 
      try { 
       spinner.setVisibility(View.GONE); 
       progress.setVisibility(View.VISIBLE); 
       new Initialize().execute(); 

      } catch (Exception e) { 
       spinner.setVisibility(View.VISIBLE); 
       progress.setVisibility(View.GONE); 

       Log.d("Error","exception: " + e.getMessage()); 
      } 
     } 
} 

초기화는

private class Initialize extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       if (orders == null || orders.isEmpty()) { 
        orders = new ArrayList<Order>(); 
        BaseProcess Proc = new BaseProcess(MainActivity.this); 
        orders.addAll(Proc.getOrdersFromBase()); 
        Proc.database.close(); 
        Proc.close(); 
       } 
      } catch (Exception ex) { 
       Log.d("Error","exception " + ex.getMessage()); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 

      adapter.notifyDataSetChanged(); 
      update(); 
     } 

    } 
+0

후 당신의 AsyncTask를의 PLZ 사이 execute()의 기본 동작 인, the THREAD_POOL_EXECUTOR로 선택합니다. –

+0

이 외에 다른 AsyncTask를 사용하고 있습니까? 'targetSdkVersion'이 13 이상이면'execute()'는 Android 3.2 이상에서 기본적으로 작업을 직렬화합니다. – CommonsWare

+0

@ shobhit-puri 게시 됨 –

답변

1

다른 사람 AsyncTasks가 어떻게해야합니까?

처음에는 상당히 짧은 작업에만 AsyncTask을 사용하십시오. AsyncTask은 작업 시간이 무기한 (예 : 채팅 앱의 들어오는 채팅 메시지 수신을 위해 소켓 수신) 할 때 적합하지 않습니다. API 레벨 11 +에 넘어

, use executeOnExecutor()는 API 레벨 4 (10)

+0

덕분에 정말 효과가 있습니다. –

관련 문제