> 文档中心 > Android基础#14: Android问题解决--Unable to find explicit activity class,ActivityNotFoundException,未声明Act

Android基础#14: Android问题解决--Unable to find explicit activity class,ActivityNotFoundException,未声明Act

    错误信息,通常直指问题根源。-----箴言-----

内容简介:

本节来看一个常见的崩溃问题。

问题描述:
在进行Android应用程序开发时,经常遇到“AndroidRuntime: FATAL EXCEPTION: main”,“android.content.ActivityNotFoundException: Unable to find explicit activity class ”问题,程序直接崩溃。

分析:

直接看log错误信息,很明显,是没有声明对应的Activity导致的。尤其是刚开始进行Android开发时,经常忘记声明Activity。参考关键log如下:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.test.myapplication5/com.test.myapplication5.activity.SubFrameActivity}; have you declared this activity in your AndroidManifest.xml?

“在AndroidManifest.xml中,你声明了这个activity么?”

再一检查代码,确实是没有声明。 

解决方式:
只要在AndroidMenifest.xml文件中进行Activity的声明即可。

举例:
下面是一个AndroidMenifest.xml,如果注释掉SubFrameActivity,就会出现“Unable to find explicit activity class”这种问题。

                    <!-- -->    

具体的错误信息参考如下:
 

10-16 20:32:50.481 564-929/system_process D/Interception: result: allow, reason: callerPkg == calleePkg, rule: runType===activity|||callerPkg===com.test.myapplication5|||calleePkg===com.test.myapplication5|||calleeClass===com.test.myapplication5.activity.SubFrameActivity|||action===null10-16 20:32:50.481 564-929/system_process I/ActivityManager: START u0 {cmp=com.test.myapplication5/.activity.SubFrameActivity} from uid 10042 on display 010-16 20:32:50.482 2699-2699/com.test.myapplication5 D/AndroidRuntime: Shutting down VM     --------- beginning of crash10-16 20:32:50.483 2699-2699/com.test.myapplication5 E/AndroidRuntime: FATAL EXCEPTION: main    Process: com.test.myapplication5, PID: 2699    android.content.ActivityNotFoundException: Unable to find explicit activity class {com.test.myapplication5/com.test.myapplication5.activity.SubFrameActivity}; have you declared this activity in your AndroidManifest.xml? at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1794) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512) at android.app.Activity.startActivityForResult(Activity.java:3942) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:675) at android.app.Activity.startActivityForResult(Activity.java:3902) at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:662) at android.app.Activity.startActivity(Activity.java:4231) at android.app.Activity.startActivity(Activity.java:4199) at com.test.myapplication5.MainActivity$1.onClick(MainActivity.java:34) at android.view.View.performClick(View.java:5204) at android.view.View$PerformClick.run(View.java:21153) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5539) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)10-16 20:32:50.489 564-1639/system_process W/ActivityManager:   Force finishing activity com.test.myapplication5/.MainActivity10-16 20:32:50.492 564-596/system_process D/ActivityManager: Nemu don't show crash dialog of ProcessRecord{2592e89 2699:com.test.myapplication5/u0a42}10-16 20:32:50.493 564-594/system_process D/Interception: result: allow, reason: calleePkg is system app, rule: runType===broadcast|||callerPkg===android|||calleePkg===com.mumu.acc|||calleeClass===com.mumu.acc.AccMsgReceiver|||action===uu.intent.action.STOP_ACCELERATE10-16 20:32:50.493 906-1068/com.netease.nemu_vapi_android.nemu D/com.netease.nemu_android_watchdog_lib.core.Watchdog: upload event: {"architecture":"x86_64","channel":"mac-nochannel","engine":"MAC","language":"zh-Hans","package":"mac-nopackage","usage":"0","uuid":"2909ab3a6d7656d98d4abc40b42ebc06","version":"1.9.21","x":{"app_elapse":29,"app_name":"MyApplication5","app_package":"com.test.myapplication5","error":{"code":0,"msg":"ok"},"token":""}}type: ExitAPPsign: I2Zjzeiz7/+eE95c77VVf/5xrqA=uid: 100010-16 20:32:50.495 1082-1082/com.mumu.acc D/AccService: AccMsgReceiver: uu.intent.action.STOP_ACCELERATE10-16 20:32:50.497 564-1639/system_process I/com.android.server.tabs.TabManagerService: notifyClosing:741: notify tab closed in android as it's closed task com.test.myapplication5, taskId: 742, elapseTime: 2957810-16 20:32:50.502 2699-2699/com.test.myapplication5 I/Process: Sending signal. PID: 2699 SIG: 9

扩展:

从log信息中,看可以看到一个Activity被启动时的堆栈信息。这有利于理解Activity的生命周期。

这不就是很多面试官最喜欢问的问题么? 建议读者一定要深刻理解这些错误信息。


注:重视错误信息,重视警告信息,重视提示信息。