首次安装后,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()
,还是在onCreate
、onStart
或onResume
中调用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) 个答案