启动应用时Android代码中的例外情况

时间:2015-07-15 19:21:05

标签: android exception

在" Crashes和ANRs" Google Play开发者控制台我收到了这样的报告:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.res.Resources.getAssets()' on a null object reference
at android.app.LoadedApk.getAssets(LoadedApk.java:590)
at android.app.LoadedApk.makeApplication(LoadedApk.java:646)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5088)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1509)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5944)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)

出现此问题的设备是Galaxy S4并运行Android 5.0

可能是什么 - 我的代码中没有一行,为什么会失败?

非常感谢!

3 个答案:

答案 0 :(得分:2)

我也在我的控制台中得到了这个。 当用户在当前正在更新时或之后启动应用时,似乎会发生这种情况。

一种可能的解决方法是检查应用程序启动时getResources是否返回null,如果是,则将其终止:

public class DevToolsApplication extends Application { 
    private static final String TAG = "DevToolsApplication"; 

    @Override 
    public void onCreate() { 
        super.onCreate(); 
        AppLogger.i(TAG, "app start..."); 
        checkAppReplacingState(); 
    } 

    private void checkAppReplacingState() { 
        if (getResources() == null) { 
            AppLogger.w(TAG, "app is replacing...kill"); 
            Process.killProcess(Process.myPid()); 
        } 
    } 
} 

有关详细信息,请参阅此处 https://issuetracker.google.com/issues/36972466

答案 1 :(得分:1)

确保在您拨打getAssets()的任何地方,将其称为:

getApplicationContext().getAssets()

看起来好像你在一个没有应用程序上下文的类中调用getAssets(),因此它是null。

答案 2 :(得分:0)

AndroidManifest.xml文件中添加以下叠加层时,我遇到了同样的异常。即使在删除了覆盖代码后,也陷入了上述异常。

<overlay android:targetPackage="com.android.systemui"
             android:priority="1"/>

只需完全关闭Android Studio。再次打开项目。清除并构建异常已清除。