Context.startActivity出現AndroidRuntimeException

轉:http://hi.baidu.com/huaxinchang/item/e1a771cf4d424312b77a2416java

昨天作了一個Activity的啓動動畫,效果是點擊桌面圖標先出現動畫後啓動Activity,今天想讓其開機啓動,因而我寫了一個類BootReceiver.java用於接收開機廣播,啓動動畫效果,代碼以下:android

public class BootReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
            Log.d("splashscreen", "SplashScreen---------->>>>>>>>BootReceiver");
            Intent splash=new Intent(context,SplashScreen.class);
            context.startActivity(splash);
        }
    }app

}ide

調試程序的時候發現其並未開機啓動,使用adb logcat發現報了以下的錯誤。動畫

E/JavaBinder( 2252): *** Uncaught remote exception!  (Exceptions are not yet supported across processes.)ui

E/JavaBinder( 2252): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
E/JavaBinder( 2252):     at android.app.ContextImpl.startActivity(ContextImpl.java:622)
E/JavaBinder( 2252):     at com.android.server.ConnectivityService.sendBugReportToServer(ConnectivityService.java:2055)
E/JavaBinder( 2252):     at com.android.server.ConnectivityService.startUsingNetworkFeature(ConnectivityService.java:725)
E/JavaBinder( 2252):     at android.net.IConnectivityManager$Stub.onTransact(IConnectivityManager.java:135)
E/JavaBinder( 2252):     at android.os.Binder.execTransact(Binder.java:288)
E/JavaBinder( 2252):     at dalvik.system.NativeStart.run(Native Method)

借用高人分析:
Context 中有一個startActivity方法,Activity繼承自Context,重載了startActivity方法。若是使用Activity的 startActivity方法,不會有任何限制,而若是使用Context的startActivity方法的話,就須要開啓一個新的task,遇到上面那個異常的,都是由於使用了Context的startActivity方法。解決辦法是,加一個flag。在context.startActivity(splash)以前加上
splash.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
這樣就能夠在新的task裏面啓動這個Activity了。 this

相關文章
相關標籤/搜索