2012-12-20 2 views
0

그래서 ..활동에서 AsyncTask를을 유지, 단편화하지

, 내 활동 tabhosts 등을 활용 viewpager 기반의 복잡한 조각을 다음과 같이 내가 가지고하는 것입니다. 이것이 기본 설정입니다.

일단 이것이 생성되면 AsyncTask를 사용하여 데이터베이스에서 일부 데이터를 가져옵니다. ASyncTask가 완료되면 fragmentmanager를 사용하는 뷰 페이지의 각 조각을 찾고 데이터를 설정하는 각 조각 내에서 함수를 호출합니다. 예를 들어, 조각 A에서 데이터는 목록 어댑터 내의 목록으로 설정되고 조각 B에서는 데이터가지도에 표시됩니다.

모든 조각이 동일한 데이터를 사용하므로이 방법으로 설정 했으므로 하나의 ASyncTask 만 호출하면됩니다. 그것은 완벽하게 작동합니다.

내 문제는 사용자가 화면을 로딩하는 동안 화면을 회전시키는 경우입니다. 따라서 조각에서 ASyncTask를 호출하면 setRetainInstance를 사용할 수 있으며 이전에는 활동 내에서 onRetainNoneConfigurationInstance ..를 사용할 수 있지만 이제는 더 이상 사용되지 않습니다.

사람이 조언 해 줄 수 있습니다 .. 내가 검색 나이를 지출하고 아무도이 특정 상황에 대한 대답을 것 같다?

답변

2

상태를 유지하려면 보이지 않는 Fragment을 사용할 수 있습니다. 기본적으로 onRetainNoneConfigurationInstance과 동일하지만 더 이상 사용되지 않습니다.

이 예에서 문제가 http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html#config-changes

을보고 당신은 FragmentManager에 RetainFragment을 추가해야하거나 복원 할 수 없을거야.

public static RetainFragment findOrCreateRetainFragment(FragmentManager fm) { 
    RetainFragment fragment = (RetainFragment) fm.findFragmentByTag(TAG); 
    if (fragment == null) { 
     fragment = new RetainFragment(); 
     fm.beginTransaction().add(fragment, TAG).commit(); // add this 
    } 
    return fragment; 
} 
+0

조금 해킹 된 것 같습니다. 그러나 이것이 '완료된 것'입니까? –

+0

로더 살펴보기 - 해킹없이 문제를 해결해야합니다. –

+0

@ThomasClowes 활동 또는 그 일부를 조각으로 바꾸고 그 부분을 조각 방법으로 포함시킬 수도 있습니다. 따라서 탭 호스트 또는 뷰 페이지가 현재 액티비티에 의해 관리되고 있다면 해당 부분을 조각으로 추출하십시오. 단편은 다른 단편을 포함 할 수 있습니다. – zapl

0

IntentService를 사용하여 데이터베이스에서 데이터를 가져오고 구성 변경에 대해 걱정할 필요가 없습니다. Intent를 보내어 데이터를 가져오고, LocalBroadcastManager를 사용하여 브로드 캐스트 인 텐트를 알리고 싶은 다른 구성 요소로 다시 보냅니다.

+0

그 대답은 .. 작동하지만 AsyncTask는 IntentService가 아닌 반면에 내가하려고하는 대상을 위해 설계되었습니다. –