我有一个异常,在应用程序闲置一段时间后抛出异常。当我的应用程序试图引用我的单例字体类时,似乎总会发生这种情况。
我的单例类(TypefaceSingleton.java)用于从单个源引用Roboto字体。这是实际文件的缩小版本。我已经从堆栈跟踪中标记了该行。
package com.steve.demo;
import android.content.Context;
import android.graphics.Typeface;
import android.view.View;
public class TypefaceSingleton {
private static Context mContext;
public static void initialize(Context context) {
mContext = context;
}
private static Typeface robotoCondensedBoldItalic;
public static Typeface getRobotoCondensedBoldItalic() {
if (robotoCondensedBoldItalic == null) {
// (TypefaceSingleton.java:111) is below
robotoCondensedBoldItalic = Typeface.createFromAsset(mContext.getAssets(), "fonts/Roboto/RobotoCondensed-BoldItalic.ttf");
}
return robotoCondensedBoldItalic;
}
private static TypefaceSingleton mInstance;
public static TypefaceSingleton getInstance() {
if (mContext == null) {
throw new IllegalArgumentException("This class must be initialized before");
}
if (mInstance == null) {
mInstance = new TypefaceSingleton();
}
return mInstance;
}
private TypefaceSingleton() {
// Todo here
}
}
我只对的单例类进行初始化。我有一个执行初始化的splashscreen活动。
// Perform Initialization
TypefaceSingleton.initialize(mContext.getApplicationContext());
TypefaceSingleton.getInstance();
抛出的异常表示对TypefaceSingleton.getRobotoCondensedBoldItalic的空指针引用。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.steve.demo/com.steve.demo.RoutesActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2334)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392)
at android.app.ActivityThread.access$900(ActivityThread.java:169)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1280)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5487)
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:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.steve.demo.TypefaceSingleton.getRobotoCondensedBoldItalic(TypefaceSingleton.java:111)
at com.steve.demo.RoutesActivity.setCustomActionBarTitle(RoutesActivity.java:130)
at com.steve.demo.RoutesActivity.onCreate(RoutesActivity.java:86)
at android.app.Activity.performCreate(Activity.java:5451)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
... 11 more
我确定问题必须与java处理内存(即垃圾收集?)但我不知道如何解决。
提前致谢。
史蒂夫