我正在尝试启动一个Android服务:
startService(new Intent(this, MetawatchServiceStatic.class));和应用程序崩溃与ClassNotFoundException。但是--当应用程序再次启动时,在第二次尝试上运行得很好。一切都很好直到系统重新启动。重新启动后,我需要尝试两次启动服务,再次。
我试图在另一个进程中使用清单中的定义启动服务:
<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
逻辑猫:
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)发布于 2014-08-16 23:09:24
这里有一个".MetawatchService",,这是因为清单文件中声明的Service与实际要启动的Service(即MetawatchServiceStatic.class. )之间的区别
让这两个人同名。
发布于 2014-08-17 00:07:18
如果服务在类MetawatchServiceStatic的“第二次单击之后”启动,这是因为第二次单击没有执行您认为的操作。该按钮可能有另一个侦听器或onClick中允许它调用正确服务类的某些更改。
您的清单声明为MetawatchService,但在单击按钮时,您正在尝试运行'MetawatchServiceStatic`‘(最后的“静态”使它们不同)。这似乎不是您所有的代码或整个清单。服务必须在清单中声明才能运行。
如果您正确命名它或发现是什么导致第二次和后续单击工作,您将解决您的问题。
https://stackoverflow.com/questions/25344537
复制相似问题