2012-10-22 5 views
0

내 응용 프로그램에서 응용 프로그램을 시작할 때마다 PHP 스크립트를 실행하고 그에 따라 응용 프로그램을로드하려고합니다. 따라서 내 ONSTART에서 정적 부울 varialbleonStart에서 ASyncTask를 열 때 오류가 발생했습니다.

boolean firstRun = false; 

을 만들어, 내가 TEH 다음 코드를 추가 : 위의 코드는 한 번만 실행 즉 소니의 friend'd 장치에서

// If images need to be downloaded, call SProgressAsyncTask class 
    public void onStart() { 
    super.onStart(); 

    if (firstRun) { 
     sat = new SProgressAsyncTask(this); 
     sat.execute(""); 

     firstRun = false; 
    } 
} 

를, 그것은 완벽하게 작동 즉 응용 프로그램의 시작. 내 Sony Xperia P에서 위의 코드는 응용 프로그램이이 기본 화면에 나타날 때마다 실행됩니다. firstRun이 false로 설정되면이 활동으로 돌아올 때마다 위 코드가 실행되는 이유는 무엇입니까? 나는 내 장치에서 디버깅을 시도하고 나는 다음과 같은 오류가 발생합니다 : 대신 활동 통과 컨텍스트를 전달

10-22 17:41:49.879: E/WindowManager(30235): Activity org.mumbai77.core.Mumbai77Activity has leaked window [email protected] that was originally added here 
10-22 17:41:49.879: E/WindowManager(30235): android.view.WindowLeaked: Activity org.mumbai77.core.Mumbai77Activity has leaked window [email protected] that was originally added here 
10-22 17:41:49.879: E/WindowManager(30235):  at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.view.Window$LocalWindowManager.addView(Window.java:537) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.Dialog.show(Dialog.java:278) 
10-22 17:41:49.879: E/WindowManager(30235):  at org.mumbai77.components.ProgressAsyncTask.onPreExecute(ProgressAsyncTask.java:56) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.os.AsyncTask.execute(AsyncTask.java:511) 
10-22 17:41:49.879: E/WindowManager(30235):  at org.mumbai77.core.Mumbai77Activity.onStart(Mumbai77Activity.java:170) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1133) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.Activity.performStart(Activity.java:4475) 
10-22 17:41:49.879: E/WindowManager(30235): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1940) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.ActivityThread.access$600(ActivityThread.java:127) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.os.Looper.loop(Looper.java:137) 
10-22 17:41:49.879: E/WindowManager(30235):  at android.app.ActivityThread.main(ActivityThread.java:4441) 
10-22 17:41:49.879: E/WindowManager(30235):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-22 17:41:49.879: E/WindowManager(30235):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-22 17:41:49.879: E/WindowManager(30235):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
10-22 17:41:49.879: E/WindowManager(30235):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
10-22 17:41:49.879: E/WindowManager(30235):  at dalvik.system.NativeStart.main(Native Method) 

내가 SProgressAsyncTask 클래스를 변경하고 - getApplicationContext(),하지만 더 악화했다.

누구나 나를 도울 수 있습니다. 왜 (firstRun)가 매번 한 번만 실행되는 것이 아니라면 언제든지 onStart가 실행됩니다.

BTW, 내 & 내 firend의 장치에는 모두 ICECREAM O 만 있습니다.

이 단계에서 5-6 일이 지나면 막 다른 도움을 얻을 수 있습니다. 이 오류를 없애도록 도와주세요.

+0

'firstRun' 변수를'false' 값으로 초기화하는 이유는 무엇입니까? 이 경우 AsyncTask가 시작되지 않습니다. –

+0

죄송합니다, 그것은 진실로 초기화됩니다. – Tvd

+0

장치에서 실행되는 동안 응용 프로그램이 종료되지 않습니까? (나도 몰라, 아마도 당신은 몇 가지 작업 살인범이있다).그렇지 않은 경우 활동 라이프 사이클에 대한 더 많은 코드를 제공하십시오. –

답변

0

얼마나 예상치 못한 일입니까! 난 그냥 정적 클래스에서 재판을

는 변수

public static boolean FIRST_START = true; 

내 활동 클래스의

을 만들어 CONSTANTS.FIRST_START와 firstRun varialbe을 교체하고 또한 ONSTART의 경우() 안에 CONTACTS.FIRST_START = false를 설정합니다. 그리고 이제 메소드를 실제로 한 번만 호출합니다. 즉 실제로 앱이 시작되는 동안입니다. 그런 다음 다시 활동으로 돌아 왔을 때 전화를받지 않습니다.

같은 방법으로 다른 클래스의 다른 var를 사용했습니다. 이게 얼마나 이상한가요? 전혀 이것이 도움이 될 수 있습니다.

0

firstRun 개체를 true (onCreate)으로 설정한다고 가정합니다. 그렇지 않으면 절대로 시작하지 않습니다.

activity lifetime을 다시 확인해야합니다. firstRun을 true로 설정 한 곳에서 onCreate로 시작하면 onStart가 나타납니다.

이 설정으로

, 응용 프로그램은 각각의 시작

0

나는 또한 같은 상황에서 잡힌 될 수 직면이 예외에 ASyncTask을 시작합니다. AsyncTask는 백그라운드에서 작동하며 병렬 실행 UI 스레드에서 예외가 발생합니다. AsyncTask는이 예외를 제공하는 대화 상자를 표시하려고 계속 실행 중입니다. 정확한 원인은이 예외 스택 추적 바로 전에 logcat에도 인쇄됩니다. 로그캣을 확인하십시오.

관련 문제