Android(java)学习笔记63:Clock App 编写报错01

1. 首先我们二话不说直接先看报错内容如下:

07-12 08:25:03.572: E/dalvikvm(3602): native fork pid:0 done.
07-12 08:25:03.582: E/dalvikvm(3602): threadid=6: created from interp,name=ReferenceQueueDaemon
07-12 08:25:03.582: E/dalvikvm(3602): threadid=6: calling run(),name=ReferenceQueueDaemon
07-12 08:25:03.582: E/dalvikvm(3602): threadid=7: created from interp,name=FinalizerDaemon
07-12 08:25:03.582: E/dalvikvm(3602): threadid=7: calling run(),name=FinalizerDaemon
07-12 08:25:03.592: E/dalvikvm(3602): threadid=8: created from interp,name=FinalizerWatchdogDaemon
07-12 08:25:03.592: E/dalvikvm(3602): threadid=8: calling run(),name=FinalizerWatchdogDaemon
07-12 08:25:03.642: D/ActivityThread(3602): setTargetHeapUtilization:0.25
07-12 08:25:03.642: D/ActivityThread(3602): setTargetHeapIdealFree:8388608
07-12 08:25:03.642: D/ActivityThread(3602): setTargetHeapConcurrentStart:2097152
07-12 08:25:03.662: I/System.out(3602): Sending WAIT chunk
07-12 08:25:03.662: W/ActivityThread(3602): Application com.himi.clock is waiting for the debugger on port 8100...
07-12 08:25:05.253: I/System.out(3602): Debugger has connected
07-12 08:25:05.253: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:05.454: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:05.654: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:05.854: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:06.054: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:06.254: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:06.455: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:06.655: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:06.855: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:07.055: I/System.out(3602): waiting for debugger to settle...
07-12 08:25:07.256: I/System.out(3602): debugger has settled (1411)
07-12 08:26:55.171: D/ActivityThread(4159): setTargetHeapUtilization:0.25
07-12 08:26:55.171: D/ActivityThread(4159): setTargetHeapIdealFree:8388608
07-12 08:26:55.171: D/ActivityThread(4159): setTargetHeapConcurrentStart:2097152
07-12 08:26:55.391: W/dalvikvm(4159): threadid=1: thread exiting with uncaught exception (group=0x416cd498)
07-12 08:26:55.391: E/AndroidRuntime(4159): FATAL EXCEPTION: main
07-12 08:26:55.391: E/AndroidRuntime(4159): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.himi.clock/com.himi.clock.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.himi.clock/com.himi.clock.ClockActivity}; have you declared this activity in your AndroidManifest.xml?
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.os.Looper.loop(Looper.java:137)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread.main(ActivityThread.java:4914)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at java.lang.reflect.Method.invokeNative(Native Method)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at java.lang.reflect.Method.invoke(Method.java:511)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at dalvik.system.NativeStart.main(Native Method)
07-12 08:26:55.391: E/AndroidRuntime(4159): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.himi.clock/com.himi.clock.ClockActivity}; have you declared this activity in your AndroidManifest.xml?
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1541)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread.resolveActivityInfo(ActivityThread.java:1903)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:285)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:694)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.widget.TabHost.setCurrentTab(TabHost.java:358)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.widget.TabHost.addTab(TabHost.java:236)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at com.himi.clock.MainActivity.addOneTab(MainActivity.java:32)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at com.himi.clock.MainActivity.onCreate(MainActivity.java:20)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.Activity.performCreate(Activity.java:5086)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at com.lbe.security.service.core.client.b.x.callActivityOnCreate(Unknown Source)
07-12 08:26:55.391: E/AndroidRuntime(4159):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
07-12 08:26:55.391: E/AndroidRuntime(4159):     ... 11 more
07-12 08:34:04.128: D/ActivityThread(6074): setTargetHeapUtilization:0.25
07-12 08:34:04.128: D/ActivityThread(6074): setTargetHeapIdealFree:8388608
07-12 08:34:04.128: D/ActivityThread(6074): setTargetHeapConcurrentStart:2097152
07-12 08:34:04.379: W/dalvikvm(6074): threadid=1: thread exiting with uncaught exception (group=0x416cd498)
07-12 08:34:04.389: E/AndroidRuntime(6074): FATAL EXCEPTION: main
07-12 08:34:04.389: E/AndroidRuntime(6074): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.himi.clock/com.himi.clock.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.himi.clock/com.himi.clock.ClockActivity}; have you declared this activity in your AndroidManifest.xml?
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2092)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1213)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.os.Looper.loop(Looper.java:137)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread.main(ActivityThread.java:4914)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at java.lang.reflect.Method.invokeNative(Native Method)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at java.lang.reflect.Method.invoke(Method.java:511)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at dalvik.system.NativeStart.main(Native Method)
07-12 08:34:04.389: E/AndroidRuntime(6074): Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.himi.clock/com.himi.clock.ClockActivity}; have you declared this activity in your AndroidManifest.xml?
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1541)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread.resolveActivityInfo(ActivityThread.java:1903)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:285)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:694)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.widget.TabHost.setCurrentTab(TabHost.java:358)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.widget.TabHost.addTab(TabHost.java:236)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at com.himi.clock.MainActivity.addOneTab(MainActivity.java:32)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at com.himi.clock.MainActivity.onCreate(MainActivity.java:20)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.Activity.performCreate(Activity.java:5086)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at com.lbe.security.service.core.client.b.x.callActivityOnCreate(Unknown Source)
07-12 08:34:04.389: E/AndroidRuntime(6074):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
07-12 08:34:04.389: E/AndroidRuntime(6074):     ... 11 more

仔细阅读红色字体处的报错信息知道:原来是我编写的 APP 中含有的多个 Activity,必须要在 AndroidManifest.xml 中进行声明,声明如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.himi.clock"
    android:versionCode="1"
    android:versionName="1.0" >
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">uses-sdk
    </span><span style="color: rgba(255, 0, 0, 1)">android:minSdkVersion</span><span style="color: rgba(0, 0, 255, 1)">="15"</span><span style="color: rgba(255, 0, 0, 1)">
    android:targetSdkVersion</span><span style="color: rgba(0, 0, 255, 1)">="17"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span>

<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">application
    </span><span style="color: rgba(255, 0, 0, 1)">android:allowBackup</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
    android:icon</span><span style="color: rgba(0, 0, 255, 1)">="@drawable/ic_launcher"</span><span style="color: rgba(255, 0, 0, 1)">
    android:label</span><span style="color: rgba(0, 0, 255, 1)">="@string/app_name"</span><span style="color: rgba(255, 0, 0, 1)">
    android:theme</span><span style="color: rgba(0, 0, 255, 1)">="@style/AppTheme"</span> <span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">activity
        </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">=".MainActivity"</span><span style="color: rgba(255, 0, 0, 1)">
        android:label</span><span style="color: rgba(0, 0, 255, 1)">="@string/app_name"</span> <span style="color: rgba(0, 0, 255, 1)">&gt;</span>
        <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">intent-filter</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">action </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">="android.intent.action.MAIN"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span>

            <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">category </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">="android.intent.category.LAUNCHER"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
        <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">intent-filter</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">activity</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
    
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">activity </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">=".ClockActivity"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">activity </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">=".StopwatchActivity"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
    <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">activity </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">=".TimerActivity"</span> <span style="color: rgba(0, 0, 255, 1)">/&gt;</span>
<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">application</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

</manifest>

再次加载程序到手机里面,发现这时候是可以运行的,没有报错了

 

那么为什么要这样在 AndroidManifest.xml 声明注册多个 activity???

答:我们知道不同 activity 代表不同的窗口界面,Android 系统只有先注册了不同的 activity,系统内部才能对它操作,比如利用 intent 操作。