3

我試圖啓動Activity並關閉其中的AsyncTask類(onPostExecute())。在活動上下文之外開始新的活動。

我的代碼:

Intent i = new Intent(parentActivity, ThunderHunter.class); 
c.startActivity(i); 
parentActivity.finish(); 

但它不工作,logcat中顯示:

08-01 18:01:27.640: E/AndroidRuntime(12398): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.app.ContextImpl.startActivity(ContextImpl.java:1029) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.app.ContextImpl.startActivity(ContextImpl.java:1023) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.content.ContextWrapper.startActivity(ContextWrapper.java:283) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at com.radzik.thunter.FunkcjeAPI$Logowanie.onPostExecute(FunkcjeAPI.java:151) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at com.radzik.thunter.FunkcjeAPI$Logowanie.onPostExecute(FunkcjeAPI.java:1) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.os.AsyncTask.finish(AsyncTask.java:631) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.os.Looper.loop(Looper.java:137) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at android.app.ActivityThread.main(ActivityThread.java:4898) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at java.lang.reflect.Method.invokeNative(Native Method) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at java.lang.reflect.Method.invoke(Method.java:511) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
08-01 18:01:27.640: E/AndroidRuntime(12398): at dalvik.system.NativeStart.main(Native Method) 

所以我改變的代碼是:

Intent i = new Intent(context, ThunderHunter.class); 
c.startActivity(i); 
parentActivity.finish(); 

但是,如果沒有例外的結果(仍然是相同的錯誤)。

有什麼辦法可以正確使用嗎?

+0

方面從至極活動意味着你要撥打的新的,所以試試這個意向書I =新意圖(YourActivity .this(或getApplicationContext()),ThunderHunter.class); – Tobiel

回答

18

的logcat的告訴你問題是在第一線

Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag 

什麼添加標誌

Intent i = new Intent(context, ThunderHunter.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
c.startActivity(i); 
parentActivity.finish(); 

你可以得到所有可用的列表Intent Flagshere in the docs

+0

爲什麼您需要使用此標誌文檔說:「如果設置,此活動將成爲此歷史堆棧上的新任務的開始。」所以問題實際上在使用不活動上下文。 –

+0

@YevgenKulik根據情況,這可能是問題。但有時候'Activity Context'不可用。 – codeMagic

2

嘗試的活動範圍之外這個 -

Intent i = new Intent(context, ThunderHunter.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 
parentActivity.finish(); 

你在呼喚新的活動,所以你必須設置標誌外通過contxet。

3

添加Intent.FLAG_ACTIVITY_NEW_TASK會解決你的錯誤,但確保你是否需要這個標誌,因爲它會觸發活動作爲你可能沒有的新任務你想在你的場景中。

爲了避免這個標誌,你可以寫在主Activity一個Handler並調用它onPostExecute()

+0

你能舉出一個更完整的例子嗎? –