尝试启动服务时ClassNotFoundException

时间:2014-08-16 22:23:35

标签: java android android-service classnotfoundexception

我正在尝试启动Android服务:

startService(new Intent(this, MetawatchServiceStatic.class));

应用程序与ClassNotFoundException崩溃。 当应用程序再次启动时,它在第二次尝试时完美运行。在系统重启之前一切正常。重新启动后,我需要再次尝试启动服务两次。

我尝试使用manifest中的定义在另一个进程中启动该服务:

<activity
    android:name=".MetawatchActivity"
    android:label="@string/app_name"
    android:process="com.Clusterrr.metawatch.gui" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<service android:name="com.Clusterrr.metawatch.MetawatchServiceStatic" >

点击按钮启动服务:

public void onClick(View v)
{
    switch (v.getId())
    {
    case R.id.buttonStart:
        try
        {
            startService(new Intent(this, MetawatchServiceStatic.class));
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
        break;
    }
}

我无法捕捉到这个Exception,因为它发生在服务过程中并立即崩溃。但服务在第二次点击时完美开始。在第三和其他尝试一切如果也好。直到重启或APK重新安装。但有时它会在第一次尝试时没有任何问题。我不明白为什么。

Android版:4.4.2

logcat的:

1995-1995/com.Clusterrr.metawatch.services E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.Clusterrr.metawatch.services, PID: 1995
    java.lang.RuntimeException: Unable to instantiate service com.Clusterrr.metawatch.MetawatchServiceStatic: java.lang.ClassNotFoundException: Didn't find class "com.Clusterrr.metawatch.MetawatchServiceStatic" on path: DexPathList[[zip file "/data/app/com.Clusterrr.metawatch-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.Clusterrr.metawatch-1, /vendor/lib, /system/lib]]
            at android.app.ActivityThread.handleCreateService(ActivityThread.java:2651)
            at android.app.ActivityThread.access$1800(ActivityThread.java:157)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5293)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.Clusterrr.metawatch.MetawatchServiceStatic" on path: DexPathList[[zip file "/data/app/com.Clusterrr.metawatch-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.Clusterrr.metawatch-1, /vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:67)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
            at android.app.ActivityThread.handleCreateService(ActivityThread.java:2648)
            at android.app.ActivityThread.access$1800(ActivityThread.java:157)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5293)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
            at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

这里有一个ClassNotFoundException,因为清单文件中声明的Service之间存在差异,即 &#34; .MetawatchService&#34; ,以及您实际尝试启动的那个, MetawatchServiceStatic.class

使两者具有相同的名称。

答案 1 :(得分:0)

如果服务开始&#34;在第二次点击后#34;对于课程MetawatchServiceStatic,因为第二次点击没有按照您的想法进行。该按钮可能有另一个监听器或onClick中的一些更改,允许它调用正确的服务类。

您的清单声明MetawatchService,但在您点击按钮时,您正在尝试运行MetawatchServiceStatic`(&#34;静态&#34;最后使它们不同)。这似乎不是您的所有代码或整个清单。服务必须在清单中声明才能运行。

如果您正确命名或找到导致第二次和随后点击的原因,您将解决问题。