2011-10-26 5 views
2

이제 내 응용 프로그램 중 하나를 단편을 사용하도록 변환하려고합니다. 이 앱은 Android 라이센스 검사기를 사용합니다. 테스트하는 동안 라이센스 검사기 코드를 주석 처리하고 이제 원하는대로 작동하는 응용 프로그램을 갖게되었습니다. 나는 시장에 그것을 다시 넣을 수 있도록 코드를 주석 처리 할 준비가되었다. 그러나 내가 할 때마다 나는이 메시지를 앱을 시작할 때마다 받는다.활동에 첨부되지 않은 조각에 대한 IllegalStateException

java.lang.IllegalStateException : 조각 MainHomeFragment {40544bd8}이 붙지 않았다. to Activity

전화 나 에뮬레이터로 테스트 할 때 이런 일이 발생합니다. 라이센스 검사기가 빨리 완료되지 않는 것처럼 보입니다. 조각을 부 풀리면 첨부 할 활동이 없습니다. 처음에 앱을 시작한 후 다시 버튼을 누르면 즉시 다시로드하고 다시 시도했습니다. 라이센스 검사기가 첫 번째 시도에서 실행 중이었을 것으로 생각했기 때문에 다음에 다시 키를 사용하기 전에 5 분을 기다렸다가 같은 문제가 발생했습니다. 이상한 것은 애플 리케이션이 2 번째 시간을 날려 버린 후에 다시 시도하면된다. 그러나 4 번째 시도에서는 다시 실패한다. 그래서 첫 번째 시도에서 성공하지 못하면 안된다. LicenseChecker 코드를 주석 처리하고 다시 실행하면 매번 작동합니다. 쓰레드로서 새로운 클래스의 LicenseChecker에 대한 호출을 시도 했으므로 생성되는 Activity를 유지하지 못하지만 여전히 동일한 문제가 발생합니다. 이 문제를 해결하기 위해 노력해야 할 아이디어가 있습니까? 여기

내 주요 FragmentActivity의에서 onCreate 코드 : 왜 당신이 처음에로드 뷰와 setContentView을하지 않고 함께 다음 라이센스 절차를 마친 후, 당신은 setContentView "진짜"를 할

public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState); 

    ConnectivityManager connectivityManager 
    = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = 
    connectivityManager.getActiveNetworkInfo(); 

    if (activeNetwork != null) { 
    android_id = Secure.getString(this.getContentResolver(), 
     Secure.ANDROID_ID); 
    mObsfuscator = new AESObfuscator(SALT, getPackageName(), android_id); 
    ServerManagedPolicy serverPolicy = new 
     ServerManagedPolicy(this, mObsfuscator); 
    mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
    mChecker = new LicenseChecker(this, serverPolicy, 
     BASE64_PUBLIC_KEY); 
    mChecker.checkAccess(mLicenseCheckerCallback); 
    } 

    setContentView(R.layout.fragment_layout); 
} 
+0

업데이트를 추가합니다. 라이센스 검사기에서 라이센스 검사기가 공유 환경 설정에서 실패한 횟수를 계산하고 있다는 사실을 잊어 버렸습니다. 그 이유는 지금은 실패 할 것 같은 사용자가 몇 명 있었기 때문입니다. 그들에게 오류 메시지를주기 전에 몇 번 실패하게하십시오. 내가 SharedPreferenceEditor에서 commit()을 주석 처리하면 오류가 사라지지만 넣으려고하는 값이 저장되지 않습니다. 이슈가 발생하고 매번 다른 시간에 만 실행되는 이유는 무엇입니까? – Chris

답변

0

당신의 파편?

나는 괜찮을 것이라고 생각합니다.

+0

Sometim 라이센스 검사에 몇 초가 걸릴 수 있으며 사용자에게 기본 화면을 표시하는 데 앱이 오래 걸리는 것을 원하지 않습니다. 프래그먼트가있는 라이센스 서버를 사용하는 다른 사람이 있습니까?이 작업 방법을 알려주시겠습니까? – Chris

0

나는 이것이 정말로 오래되었다는 것을 알고있다. 그러나 나는 여전히 나의 2 센트를 넣을 것이다.

IT는 경우에만 (특정 경우에 추가 Fragment을하려는 경우, 어떻게하든 방법은 FragmentTransaction으로 또는, XML <fragment> 태그를 통해 여부를합니다 (Fragment를 추가하고 있습니다. 귀하의 질문에 명확하지 않다 라이센스 검사기에서 OK 또는 무엇이든 반환) 조각을 프로그래밍 방식으로 추가하는 것이 좋습니다.

기본적으로 FrameLayout 또는 다른 레이아웃 내에 "로드 중 ..."보기를 정의한 다음 FragmentTransaction으로 대체하십시오 그 레이아웃 객체에있는 내용이 무엇이든간에 새 Fragment.

내가하는 방법은 다음과 같습니다. Thread으로 나는 모든 백그라운드 작업이 하나의 스레드를 공유하기 때문에 AsyncTask을 매우 강력하게 싫어합니다. 동기화가 좀 더 쉬워 지지만 다운로드/네트워크 작업이 많은 경우 성능에 실제로 영향을 미칠 수 있습니다. 예를 들어 대기열 종류가 차례로 늘어나고 긴 작업을 시작하면 다른 모든 백그라운드 작업이 지연됩니다. 실행 중.

UI 스레드에서 다른 스레드를 실행해야하므로 (implements Runnable) 객체를 정의합니다 (백그라운드 스레드에서 UI를 조작하는 경우 Exception이됩니다).

기본적으로 Thread에 의해 실행되는 첫 번째 Runnable 개체에서 Activity이라는 호출에 대한 참조를 받고 인스턴스 변수로 저장합니다.그런 다음이 (필자는 run 방법의 마지막에 이렇게 같이 참조, UI 스레드에서 두 번째 Runnable 개체를 실행하는 것을 사용합니다. 이 callingActivity.runOnUiThread(new RunnableToRunOnUIThread()); 거기에이 문제에 Fragment 프로그래밍 방식

관련 문제