首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试启动服务时的ClassNotFoundException

尝试启动服务时的ClassNotFoundException
EN

Stack Overflow用户
提问于 2014-08-16 22:23:34
回答 2查看 1.4K关注 0票数 1

我正在尝试启动一个Android服务:

代码语言:javascript
复制
startService(new Intent(this, MetawatchServiceStatic.class));

和应用程序崩溃与ClassNotFoundException但是--当应用程序再次启动时,在第二次尝试上运行得很好。一切都很好直到系统重新启动。重新启动后,我需要尝试两次启动服务,再次。

我试图在另一个进程中使用清单中的定义启动服务:

代码语言:javascript
复制
<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" >

并按一下按钮开始服务:

代码语言:javascript
复制
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

逻辑猫:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-16 23:09:24

这里有一个".MetawatchService",,这是因为清单文件中声明的Service与实际要启动的Service(即MetawatchServiceStatic.class. )之间的区别

让这两个人同名。

票数 1
EN

Stack Overflow用户

发布于 2014-08-17 00:07:18

如果服务在类MetawatchServiceStatic的“第二次单击之后”启动,这是因为第二次单击没有执行您认为的操作。该按钮可能有另一个侦听器或onClick中允许它调用正确服务类的某些更改。

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

如果您正确命名它或发现是什么导致第二次和后续单击工作,您将解决您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25344537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档