2013-01-05 56 views
1

我有一個小應用程序,我玩的代碼激活一個活動。在那裏我有一個奇怪的問題,我的應用程序在啓用第二個活動後死亡。應用程序崩潰無聲:嘗試抓住終於不起作用

這裏是我的設置活動:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_settings); 

    Log.e(getClass().getSimpleName(), "enableing activity..."); 

    PackageManager pm = getPackageManager(); 
    try { 
     ComponentName componentName = new ComponentName(this, Lancher.class); 
     pm.setComponentEnabledSetting(componentName, 
          PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0); 
    } catch(Exception e) { 
     Log.e(getClass().getSimpleName(), "Got some trouble:", e); 
    } finally { 
     Log.e(getClass().getSimpleName(), "reached finally block"); 
    } 

    Log.e(getClass().getSimpleName(), "wohoo activity is enabled"); 
// ... 

這裏是我的logcat的一些線(我去掉無關的輸出):

I/ActivityManager(1384):開始活動: Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10000000 cmp = com.example.test/.Settings} from pid 6566
...
E /設置(6592):enableing活性...
I/PackageManager(1384):setEnabledSetting(),PKGNAME = com.example.test,clsName = com.example.test。 Lancher,狀態= 1,標誌= 0,PID = 6592,UID = 10203
...
d/WindowManagerImpl(1384):finishRemoveViewLocked,mViews [1]:com.android.internal.policy.impl.PhoneWindow $ DecorView @ 4054d318
D/Process(1384):killProcess,pid = 6592
I/ActivityManager(1384):強制停止包com.example.test UID = 10203
I/RegisterService(6601):android.intent.action.PACKAGE_REMOVED包:com.example.test

而我的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.test" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".Settings" 
      android:label="@string/app_name" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".Lancher" 
      android:enabled="false" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.HOME" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

你有什麼想法,爲什麼我的應用程序崩潰沒有任何輸出從finally塊?

+0

如果你使用try catch了所有的代碼,它最終不會進入block嗎? – Yahor10

+0

是的,這是,這使我困惑! – rekire

回答

2

它的工作原理,當你從0到1或PackageManager.DONT_KILL_APP

pm.setComponentEnabledSetting(componentName, 
           PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
           PackageManager.DONT_KILL_APP); 

改變標誌也許這是一個Android問題或誤解的Android文檔。

你真的需要flag == 0嗎?

+0

我在某處讀過不應該使用'DONT_KILL_APP',但我不知道原因。 – rekire

+0

DONT_KILL_APP有時仍然會殺死應用程序。 – jiashie

相關問題