随机ClassNotFoundExceptions的解释?

时间:2011-12-16 12:17:56

标签: android

我有一个~11k活动安装的应用程序,我有时会收到无法解释的ClassNotFoundExceptions。它们看起来像这样:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{name.of.my.MainActivityClass}: java.lang.ClassNotFoundException: name.of.my.MainActivityClass in loader dalvik.system.PathClassLoader[/mnt/asec/name.of.my-2/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1743)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
at android.app.ActivityThread.access$1500(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:4293)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: name.of.my.MainActivityClass in loader dalvik.system.PathClassLoader[/mnt/asec/name.of.my-2/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at android.app.Instrumentation.newActivity(Instrumentation.java:1040)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1735)
... 11 more

我从更新我的应用程序的用户(不仅是最新版本)收到了一些这些例外,所以我认为这不是特定于某些手机的问题,因为该应用程序之前为他们工作过。 我为我的主要活动类,接收器类和BackupAgent类获得了这些异常报告。 所有这些类总是直接从Android实例化。我的清单文件如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="name.of.my"
      android:versionCode="20"
      android:versionName="1.10.2"
      android:installLocation="auto">
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name" android:backupAgent="name.of.my.OwnBackupAgent">
        <activity android:name="name.of.my.MainActivityClass"
                  android:label="@string/app_name"
                  android:theme="@style/MyTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="name.of.my.OwnReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.media.RINGER_MODE_CHANGED" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

在网上搜索了几个小时后,我发现的最可能的解释是:

  • 它可能与将应用程序移动到SD卡有关,但仍有一些服务正在运行(但是Android开发指南说在这种情况下所有服务都被取消了,并且它无法解释为什么我的主要活动类突然可以再也找不到了)
  • 通过Android市场更新后,.apk可能已损坏。这可能是真的吗?如果是的话,我该怎么办呢?如果没有,还有什么可能是问题?

0 个答案:

没有答案