我正在尝试启动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)
答案 0 :(得分:1)
这里有一个ClassNotFoundException,因为清单文件中声明的Service
之间存在差异,即 &#34; .MetawatchService&#34; ,以及您实际尝试启动的那个, MetawatchServiceStatic.class 。
使两者具有相同的名称。
答案 1 :(得分:0)
如果服务开始&#34;在第二次点击后#34;对于课程MetawatchServiceStatic
,因为第二次点击没有按照您的想法进行。该按钮可能有另一个监听器或onClick中的一些更改,允许它调用正确的服务类。
您的清单声明MetawatchService
,但在您点击按钮时,您正在尝试运行MetawatchServiceStatic`(&#34;静态&#34;最后使它们不同)。这似乎不是您的所有代码或整个清单。服务必须在清单中声明才能运行。
如果您正确命名或找到导致第二次和随后点击的原因,您将解决问题。