Java.Lang.RuntimeException 해결: 활동 ComponentInfo를 인스턴스화할 수 없음
오늘은 Unable to instantiate activity ComponentInfo
라는 또 다른 런타임 예외에 대해 알아보겠습니다.
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
가 발생하는 여러 가능한 이유를 살펴보겠습니다. 마지막으로 이를 근절할 수 있는 솔루션을 갖게 될 것입니다.
java.lang.RuntimeException: 활동 ComponentInfo를 인스턴스화할 수 없음
오류 해결
오류 데모에 대한 예제 코드(MainActivity.java
파일):
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// write your remaining code here
}
예제 코드(AndroidManifest.xml
파일):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.App"
tools:targetApi="31">
<activity
android:name="MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android 에뮬레이터에서 애플리케이션을 시작하는 동안 이것을 실행하려고 하면 java.lang.RuntimeException: 활동 ComponentInfo를 인스턴스화할 수 없습니다
라는 오류가 발생합니다.
이 문제를 해결하기 위해 고려해야 할 몇 가지 가능한 원인이 있습니다. 그들 모두는 아래에 나열되어 있습니다.
-
Activity
가AndroidManifest.xml
파일에 추가되었는지 확인합니다. 왜 필요한가요?새
Activity
를 만들 때마다AndroidManifest.xml
파일에 등록해야 하기 때문입니다. 또한 모든 액세스 수정자를 확인하십시오. -
onCreate()
이전에 보려고 시도할 때도 이 오류가 발생합니다. 이 오류는 올바르지 않으며 활동 구성 요소 정보를 인스턴스화할 수 없다는 오류가 발생합니다. -
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
가 발생하는 또 다른 이유는AndroidManifest.xml
에abstract
로 선언된Activity
를 추가했기 때문입니다. 즉, 액세스하려는활동
이추상
으로 선언되었다고 말할 수 있습니다. -
활동 경로 앞에 선행 점이 누락되지 않았는지 확인합니다(이로 인해 위에 제공된 예제 코드에서 오류가 발생함).
-
MainActivity.java
파일을public
으로 선언하지 않은 경우에도 이 오류에 직면해야 합니다. 또한 파일이 올바른 패키지에 있는지 확인하십시오.
이제 가능한 모든 이유를 알고 있습니다. 어떻게 고칠 수 있습니까?
다음 솔루션을 참조하십시오.
솔루션의 예제 코드(MainActivity.java
파일):
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// write your remaining code here
}
예제 코드(AndroidManifest.xml
파일):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.App"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
활동 경로 앞에 선행 점을 추가했습니다. 또한 MainActivity.java
파일이 public
으로 선언되었으며 abstract
로 선언된 Activity
에 액세스하려고 시도하지 않는지 확인합니다.
원인으로 제시된 모든 점은 우리가 고려한다면 실제 해결책이기 때문에 주의하십시오.