Android中的"Unable to start activity ComponentInfo" – Android移動開發技術文章_手機開發 Android移動開發教學課程

Android中的"Unable to start activity ComponentInfo"或者"Unable to instantiate activity ComponentInfo"的錯誤 

 

最近在做一款音樂播放器的時候,然後在調試的過程中發現一直報這個錯誤"Unable to start activity ComponentInfo",從字面的意思看是無法啟動某個activity組件,但是看瞭manifest文件,所有的activity組件都已經註冊過瞭,為什麼會報這種錯誤?後來發現原來是註冊路徑出瞭問題,最開始的代碼是這樣的:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

      package="com.music"

      android:versionCode="1"

      android:versionName="1.0">

    <uses-sdk android:minSdkVersion="5" />

 

    <application android:icon="@drawable/icon" android:label="@string/app_name">

   

    <activity android:name=".MainActivity">

    <intent-filter>

           <action android:name="android.intent.action.MAIN"/>

           <category android:name="android.intent.category.LAUNCHER"/>

    </intent-filter>

    </activity>

    </application>

</manifest>

 對於MainActivity這個組件,程序啟動的時候尋找它的時候,根據包的路徑"package="com.music"加上".MainActivity"就是

"com.music.MainActivity",但是在工程中MainActivity是在"com.music.activity"這個包下,顯然路徑就是錯的,因此會報無法找到某個組件的錯誤。因此更改組件的註冊路徑就可以解決這個問題:

   可以將<activity android:name=".MainActivity">

   改成其相對路徑www.aiwalls.com

  <activity android:name=".activity.MainActivity">

  或者也可以直接用絕對路徑

  <activity android:name="com.music.activity.MainActivity">

註意:在註冊組件的時候,如果在名稱前面加瞭點'.',則表示該組件的路徑是package的路徑加上組件名,比如package='com.music',<activity android:name='.MainActivity'></activity>,則其完整路徑為'com.music.MainActivity'。

如果沒有加點,則表示絕對路徑,如<activity android:name="com.music.activity.MainActivity">。

有一種特殊情況是,如果要註冊的activity在當前package的根目錄下,則前面的點'.'可寫可不寫。但是如果是在package包的子包下,如package='com.music',而MainActivity的絕對路徑為'com.music.activity.MainActivity',則

<activity android:name=".activity.MainActivity">中的".activity.MainActivity"前面的點'.'不能省略。

 

作者 海子

發佈留言