有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

首次安装后,java Android应用程序类实例为空

这似乎是一个特殊的情况,目前似乎只发生在运行API 23的Nexus 6上,而不是在模拟器或(几台)4.4设备上。我将我的应用程序类作为一个单例使用,通常不会导致任何问题。但在Nexus上,它会在对应用程序类的任何引用上使应用程序崩溃,因为它总是返回null。之后,应用程序运行正常,因此这只会在初始安装后发生(当应用程序被删除或之前未安装时)

public class MyApp extends Application {
   private static MyApp APP_INSTANCE;
   public static MyApp getInstance() { return APP_INSTANCE; }

   @Override
   public void onCreate() {
      super.onCreate();
      APP_INSTANCE = this;
      // rest of code
   }
}

因此,无论我在我的MainActivity中调用MyApp.getInstance(),还是在onCreateonStartonResume中调用MainFragment,即使应用程序已经运行,它也总是会崩溃

调试时,问题不会出现。活动似乎正在放缓,因此有时间创建应用程序类的实例,但是当我跳过所有初始调用以获取MainActivity中的实例,然后尝试稍后(登录后)在我的MainFragment中获取它时,它仍然是null

我还尝试记录整个过程,我看到应用程序类的初始化已经完成,因为我的HttpClients正在设置和工作,但是onCreate没有被调用

所以。。。有人知道这是什么原因吗

添加了初始安装和第二次启动的堆栈跟踪

初始安装

    09-07 12:46:43.240    2741-2741/com.myapp.d I/Process﹕ Sending signal. PID: 2741 SIG: 9
09-07 12:50:55.150    7068-7068/com.myapp.d W/System﹕ ClassLoader referenced unknown path: /data/app/com.myapp.d-1/lib/arm
09-07 12:50:56.346    7068-7068/com.myapp.d W/ClientFactory﹕ Returning UNSAFE client
09-07 12:50:56.360    7068-7068/com.myapp.d I/ClientFactory﹕ Supported CipherSuites: [...ciphersuits here...]
09-07 12:50:56.362    7068-7068/com.myapp.d I/MyApp﹕ Returning App Instance
09-07 12:50:56.362    7068-7068/com.myapp.d I/MainActivity﹕ Init UI
09-07 12:50:56.389    7068-7068/com.myapp.d I/AppCompatViewInflater﹕ app:theme is now deprecated. Please move to using 安卓:theme instead.
09-07 12:50:56.446    7068-7068/com.myapp.d I/MyApp﹕ Returning App Instance
09-07 12:50:56.512    7068-7068/com.myapp.d I/MainActivity﹕ Check Startup
09-07 12:50:56.512    7068-7068/com.myapp.d E/MainActivity﹕ initApp(): start
09-07 12:50:56.512    7068-7068/com.myapp.d D/AndroidRuntime﹕ Shutting down VM
09-07 12:50:56.513    7068-7068/com.myapp.d E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.myapp.d, PID: 7068
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.d/com.myapp.ui.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.myapp.MyApp.isFirstBoot()' on a null object reference
            at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
            at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
            at 安卓.app.ActivityThread.-wrap11(ActivityThread.java)
            at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
            at 安卓.os.Handler.dispatchMessage(Handler.java:102)
            at 安卓.os.Looper.loop(Looper.java:148)
            at 安卓.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.myapp.MyApp.isFirstBoot()' on a null object reference
            at com.myapp.ui.MainActivity.initApp(MainActivity.java:173)
            at com.myapp.ui.MainActivity.onCreate(MainActivity.java:116)
            at 安卓.app.Activity.performCreate(Activity.java:6237)
            at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
            at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
            at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
            at 安卓.app.ActivityThread.-wrap11(ActivityThread.java)
            at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
            at 安卓.os.Handler.dispatchMessage(Handler.java:102)
            at 安卓.os.Looper.loop(Looper.java:148)
            at 安卓.app.ActivityThread.main(ActivityThread.java:5417)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:616)

第二次开机

09-07 12:54:07.970    7068-7068/com.myapp.d I/Process﹕ Sending signal. PID: 7068 SIG: 9
09-07 12:54:10.386    8420-8420/com.myapp.d W/System﹕ ClassLoader referenced unknown path: /data/app/com.myapp.d-1/lib/arm
09-07 12:54:10.397    8420-8420/com.myapp.d W/ClientFactory﹕ Returning UNSAFE client
09-07 12:54:10.409    8420-8420/com.myapp.d I/ClientFactory﹕ Supported CipherSuites: [...ciphersuites here...]
09-07 12:54:10.410    8420-8420/com.myapp.d I/MyApp﹕ onCreate()
09-07 12:54:10.766    8420-8420/com.myapp.d I/CrashlyticsCore﹕ Initializing Crashlytics 2.3.4.74
09-07 12:54:10.811    8420-8420/com.myapp.d I/MyApp﹕ Returning App Instance
09-07 12:54:10.811    8420-8420/com.myapp.d I/MainActivity﹕ Init UI
09-07 12:54:10.833    8420-8420/com.myapp.d I/AppCompatViewInflater﹕ app:theme is now deprecated. Please move to using 安卓:theme instead.
09-07 12:54:10.883    8420-8426/com.myapp.d W/art﹕ Suspending all threads took: 5.763ms
09-07 12:54:10.887    8420-8420/com.myapp.d I/MyApp﹕ Returning App Instance
09-07 12:54:10.953    8420-8420/com.myapp.d I/MainActivity﹕ Check Startup
09-07 12:54:10.953    8420-8420/com.myapp.d E/MainActivity﹕ initApp(): start
09-07 12:54:10.954    8420-8420/com.myapp.d I/MyApp﹕ Check for first boot: false
09-07 12:54:10.954    8420-8420/com.myapp.d I/MyApp﹕ Check for updated app: false
09-07 12:54:10.959    8420-8420/com.myapp.d D//SpiceManager.java:489﹕ 12:54:10.959 main adding request to request queue
09-07 12:54:10.959    8420-8420/com.myapp.d E/MainActivity﹕ initApp(): autoLogin
09-07 12:54:10.960    8420-8420/com.myapp.d E/MainActivity﹕ initApp(): end

和清单文件,没什么特别的,只是以防万一

<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    package="com.myapp">

    <!-- all my permissions: nothing special -->

    <application
        安卓:name="com.myapp.MyApp"
        安卓:allowBackup="true"
        安卓:icon="@mipmap/ic_launcher"
        安卓:label="@string/app.label"
        安卓:theme="@style/AppTheme">

        <activity
            安卓:name=".ui.MainActivity"
            安卓:configChanges="orientation"
            安卓:screenOrientation="portrait">
            <intent-filter>
                <action 安卓:name="安卓.intent.action.MAIN" />
                <category 安卓:name="安卓.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Other activities and services below -->

        <!-- And API KEYS go here -->

    </application>

</manifest>

共 (0) 个答案