1,测试反馈app连续闪退, 一打开就闪退,无限循环,可我明明已经做了闪退3次就清数据,闪退3次后根本没清数据,不知道是没捕获到还是什么
2,我有两个问题需要大家帮忙,第一是什么导致app连续闪退,第二,我明明写了Thread.UncaughtExceptionHandler捕获代码为什么没捕获到
以下是闪退后到日志:
11-21 10:37:24.101 1761-1761/? D/HeadsetPhoneState: Exit onSignalStrengthsChanged
11-21 10:37:26.983 3141-3141/? I/IgnoreTouchEvent: ignoreinputaction = false, x = 140.86957 , y = 1058.4487, pkg = com.smartisanos.launcher, wid = 35.0, slopex = 35.0, slopy = 24.0, timeout = 200.0
11-21 10:37:27.082 3141-3141/? I/IgnoreTouchEvent: ignore up event : x = 140.86957, ignore = false, ignoreUp = false, pkg = com.smartisanos.launcher
11-21 10:37:27.091 1325-18884/? I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.waimai.waimai/.activity.SplashActivity (has extras)} from uid 10018 on display 0
11-21 10:37:27.131 1325-1424/? I/IgnoreTouchEvent: ignoreTouchEvent onWindowAttached
11-21 10:37:27.141 1325-1746/? I/ActivityManager: Start proc 25535:com.waimai.waimai/u0a37 for activity com.waimai.waimai/.activity.SplashActivity
11-21 10:37:27.142 1325-1746/? V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@f7202db
11-21 10:37:27.180 3022-3022/? D/PILLS: GlobalBubbleManager : hideAllMailBubbles
11-21 10:37:27.181 3022-3022/? I/PILLS: BubbleController : bubble delay to gone already
[ 11-21 10:37:27.182 536: 1653 D/ ]
SurfaceMonitor closed!
11-21 10:37:27.208 25535-25535/? I/art: Waiting for a blocking GC AddRemoveAppImageSpace
11-21 10:37:27.209 25535-25535/? I/art: Starting a blocking GC AddRemoveAppImageSpace
11-21 10:37:27.226 25535-25535/? D/NetworkSecurityConfig: No Network Security Config specified, using platform default
11-21 10:37:27.229 25535-25535/? I/Sophix.LogTool: setLogLevel valule: I
11-21 10:37:27.229 25535-25535/? I/Sophix.SophixManager: Sophix 3.1.3 starting....
11-21 10:37:27.235 25535-25535/? I/System.out: oreo sophixmode = 0info = do not found any patch file to load.
11-21 10:37:27.235 25535-25535/? I/System.out: oreo sophix 其它错误信息, 查看PatchStatus类说明
11-21 10:37:27.236 25535-25535/? I/MultiDex: VM with version 2.1.0 has multidex support
11-21 10:37:27.236 25535-25535/? I/MultiDex: install
11-21 10:37:27.236 25535-25535/? I/MultiDex: VM has multidex support, MultiDex support library is disabled.
11-21 10:37:27.247 25535-25535/? I/art: Rejecting re-init on previously-failed class java.lang.Class<com.orhanobut.hawk.Hawk$2>: java.lang.NoClassDefFoundError: Failed resolution of: Lrx/Observable$OnSubscribe;
11-21 10:37:27.247 25535-25535/? I/art: at void com.waimai.waimai.widget.BaseApplication.onCreate() (BaseApplication.java:201)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1025)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:5618)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread.-wrap2(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:-1)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1708)
11-21 10:37:27.247 25535-25535/? I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
11-21 10:37:27.247 25535-25535/? I/art: at void android.os.Looper.loop() (Looper.java:159)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6345)
11-21 10:37:27.247 25535-25535/? I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
11-21 10:37:27.247 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1096)
11-21 10:37:27.247 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:883)
11-21 10:37:27.247 25535-25535/? I/art: Caused by: java.lang.ClassNotFoundException: Didn't find class "rx.Observable$OnSubscribe" on path: DexPathList[[zip file "/data/app/com.waimai.waimai-1/base.apk"],nativeLibraryDirectories=[/data/app/com.waimai.waimai-1/lib/arm, /system/fake-libs, /data/app/com.waimai.waimai-1/base.apk!/lib/armeabi, /system/lib, /vendor/lib]]
11-21 10:37:27.247 25535-25535/? I/art: at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
11-21 10:37:27.247 25535-25535/? I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
11-21 10:37:27.247 25535-25535/? I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
11-21 10:37:27.247 25535-25535/? I/art: at void com.waimai.waimai.widget.BaseApplication.onCreate() (BaseApplication.java:201)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1025)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:5618)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread.-wrap2(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:-1)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1708)
11-21 10:37:27.247 25535-25535/? I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
11-21 10:37:27.247 25535-25535/? I/art: at void android.os.Looper.loop() (Looper.java:159)
11-21 10:37:27.247 25535-25535/? I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6345)
11-21 10:37:27.247 25535-25535/? I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
11-21 10:37:27.247 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1096)
11-21 10:37:27.247 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:883)
11-21 10:37:27.249 25535-25535/? I/art: Rejecting re-init on previously-failed class java.lang.Class<com.orhanobut.hawk.Hawk$1>: java.lang.NoClassDefFoundError: Failed resolution of: Lrx/Observable$OnSubscribe;
11-21 10:37:27.249 25535-25535/? I/art: at void com.waimai.waimai.widget.BaseApplication.onCreate() (BaseApplication.java:201)
11-21 10:37:27.249 25535-25535/? I/art: at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1025)
11-21 10:37:27.249 25535-25535/? I/art: at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:5618)
11-21 10:37:27.249 25535-25535/? I/art: at void android.app.ActivityThread.-wrap2(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:-1)
11-21 10:37:27.249 25535-25535/? I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1708)
11-21 10:37:27.250 25535-25535/? I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
11-21 10:37:27.250 25535-25535/? I/art: at void android.os.Looper.loop() (Looper.java:159)
11-21 10:37:27.250 25535-25535/? I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6345)
11-21 10:37:27.250 25535-25535/? I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
11-21 10:37:27.250 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1096)
11-21 10:37:27.250 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:883)
11-21 10:37:27.250 25535-25535/? I/art: Caused by: java.lang.ClassNotFoundException: Didn't find class "rx.Observable$OnSubscribe" on path: DexPathList[[zip file "/data/app/com.waimai.waimai-1/base.apk"],nativeLibraryDirectories=[/data/app/com.waimai.waimai-1/lib/arm, /system/fake-libs, /data/app/com.waimai.waimai-1/base.apk!/lib/armeabi, /system/lib, /vendor/lib]]
11-21 10:37:27.250 25535-25535/? I/art: at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
11-21 10:37:27.250 25535-25535/? I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
11-21 10:37:27.250 25535-25535/? I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
11-21 10:37:27.250 25535-25535/? I/art: at void com.waimai.waimai.widget.BaseApplication.onCreate() (BaseApplication.java:201)
11-21 10:37:27.250 25535-25535/? I/art: at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1025)
11-21 10:37:27.250 25535-25535/? I/art: at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:5618)
11-21 10:37:27.250 25535-25535/? I/art: at void android.app.ActivityThread.-wrap2(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:-1)
11-21 10:37:27.250 25535-25535/? I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1708)
11-21 10:37:27.250 25535-25535/? I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
11-21 10:37:27.250 25535-25535/? I/art: at void android.os.Looper.loop() (Looper.java:159)
11-21 10:37:27.250 25535-25535/? I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6345)
11-21 10:37:27.250 25535-25535/? I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
11-21 10:37:27.250 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1096)
11-21 10:37:27.250 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:883)
11-21 10:37:27.253 25535-25535/? I/art: Rejecting re-init on previously-failed class java.lang.Class<com.orhanobut.hawk.HawkBuilder$2>: java.lang.NoClassDefFoundError: Failed resolution of: Lrx/functions/Func0;
11-21 10:37:27.253 25535-25535/? I/art: at com.orhanobut.hawk.HawkBuilder com.orhanobut.hawk.Hawk.init(android.content.Context) (Hawk.java:33)
11-21 10:37:27.253 25535-25535/? I/art: at void com.waimai.waimai.widget.BaseApplication.onCreate() (BaseApplication.java:201)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1025)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:5618)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread.-wrap2(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:-1)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1708)
11-21 10:37:27.253 25535-25535/? I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
11-21 10:37:27.253 25535-25535/? I/art: at void android.os.Looper.loop() (Looper.java:159)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6345)
11-21 10:37:27.253 25535-25535/? I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
11-21 10:37:27.253 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1096)
11-21 10:37:27.253 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:883)
11-21 10:37:27.253 25535-25535/? I/art: Caused by: java.lang.ClassNotFoundException: Didn't find class "rx.functions.Func0" on path: DexPathList[[zip file "/data/app/com.waimai.waimai-1/base.apk"],nativeLibraryDirectories=[/data/app/com.waimai.waimai-1/lib/arm, /system/fake-libs, /data/app/com.waimai.waimai-1/base.apk!/lib/armeabi, /system/lib, /vendor/lib]]
11-21 10:37:27.253 25535-25535/? I/art: at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
11-21 10:37:27.253 25535-25535/? I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
11-21 10:37:27.253 25535-25535/? I/art: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
11-21 10:37:27.253 25535-25535/? I/art: at com.orhanobut.hawk.HawkBuilder com.orhanobut.hawk.Hawk.init(android.content.Context) (Hawk.java:33)
11-21 10:37:27.253 25535-25535/? I/art: at void com.waimai.waimai.widget.BaseApplication.onCreate() (BaseApplication.java:201)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.Instrumentation.callApplicationOnCreate(android.app.Application) (Instrumentation.java:1025)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread.handleBindApplication(android.app.ActivityThread$AppBindData) (ActivityThread.java:5618)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread.-wrap2(android.app.ActivityThread, android.app.ActivityThread$AppBindData) (ActivityThread.java:-1)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1708)
11-21 10:37:27.253 25535-25535/? I/art: at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
11-21 10:37:27.253 25535-25535/? I/art: at void android.os.Looper.loop() (Looper.java:159)
11-21 10:37:27.253 25535-25535/? I/art: at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6345)
11-21 10:37:27.253 25535-25535/? I/art: at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
11-21 10:37:27.253 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:1096)
11-21 10:37:27.253 25535-25535/? I/art: at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:883)
11-21 10:37:27.256 25535-25535/? W/Hawk: key is generating without password
11-21 10:37:27.256 25535-25535/? W/Hawk: key is generated without password
11-21 10:37:27.260 25535-25535/? D/JPush: [JPushInterface] action:init - sdkVersion:2.1.5, buildId:298
11-21 10:37:27.272 25535-25535/? D/JPush: [JPushGlobal] metadata: appKey - 239b3fbf21575861caecae55
11-21 10:37:27.273 25535-25535/? D/JPush: [JPushGlobal] metadata: channel - jpush_release
11-21 10:37:27.309 25535-25535/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.waimai.waimai, PID: 25535
java.lang.RuntimeException: Unable to create application com.waimai.waimai.widget.BaseApplication: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.waimai.waimai.model.RongyunInfo.appkey' on a null object reference
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5621)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1708)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:159)
at android.app.ActivityThread.main(ActivityThread.java:6345)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1096)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:883)
Caused by: java.lang.NullPointerException: Attempt to read from field 'java.lang.String com.waimai.waimai.model.RongyunInfo.appkey' on a null object reference
at com.waimai.waimai.widget.BaseApplication.onCreate(BaseApplication.java:238)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1025)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5618)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1708)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:159)
at android.app.ActivityThread.main(ActivityThread.java:6345)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1096)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:883)
11-21 10:37:27.315 1325-2343/? W/ActivityManager: Force finishing activity com.waimai.waimai/.activity.SplashActivity, mTaskHistory size = 20
[ 11-21 10:37:27.334 1325: 2343 D/ ]
SurfaceMonitor closed!
11-21 10:37:27.347 1325-1378/? W/ActivityManager: Skipping crash dialog of ProcessRecord{c30508d 25535:com.waimai.waimai/u0a37}: background
11-21 10:37:27.348 25535-25535/? I/Process: killProcess pid=25535
java.lang.RuntimeException
at android.os.Process.killProcess(Process.java:1252)
at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:111)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1068)
at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1063)
11-21 10:37:27.348 25535-25535/? I/Process: Sending signal. PID: 25535 SIG: 9
11-21 10:37:27.361 1325-18879/? I/ActivityManager: Process com.waimai.waimai (pid 25535) has died
11-21 10:37:27.361 1325-18879/? D/ActivityManager: cleanUpApplicationRecord -- 25535
11-21 10:37:27.361 1325-18879/? W/ActivityManager: Service crashed 2 times, stopping: ServiceRecord{c0e3f0f u0 com.waimai.waimai/cn.jpush.android.service.PushService}
11-21 10:37:27.362 1325-1424/? I/IgnoreTouchEvent: ignoreTouchEvent onWindowDetached
11-21 10:37:27.366 1325-1812/? D/WindowManager: relayoutVisibleWindow: Window{c7be61b u0 SurfaceView - com.smartisanos.launcher/com.smartisanos.launcher.Launcher EXITING} mAnimatingExit=true, mRemoveOnExit=false, mDestroying=false
11-21 10:37:27.373 1325-18887/? D/WindowManager: relayoutVisibleWindow: Window{32fad18 u0 com.smartisanos.launcher/com.smartisanos.launcher.Launcher EXITING} mAnimatingExit=true, mRemoveOnExit=false, mDestroying=false
11-21 10:37:27.385 3022-3022/? D/PILLS: GlobalBubbleManager : hideAllMailBubbles
11-21 10:37:27.385 3022-3022/? I/PILLS: BubbleController : bubble delay to gone already
11-21 10:37:27.413 1325-23682/? W/InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@382708e attribute=null, token = android.os.BinderProxy@883f8fb
11-21 10:37:27.941 1761-1761/? D/HeadsetPhoneState: Enter onSignalStrengthsChanged
11-21 10:37:27.941 1761-1761/? D/HeadsetPhoneState: Exit onSignalStrengthsChanged
以下是我Application代码
public class BaseApplication extends Application {
public static Context context;
public static String cookieStore;
public static QiniuFileUploader qiniuUp=new QiniuFileUploader();
public interface ShopHixEvent {
void handle(int mode, int code, String info, int handlePatchVersion);
}
public static ShopHixEvent sophixEvent=null;
private static BaseApplication mInstance;
public static BaseApplication getInstance()
{
return mInstance;
}
private void initOkGo(){
HttpHeaders headers = new HttpHeaders();
headers.put("User-Agent", Global.usergent); //header不支持中文,不允许有特殊字符
headers.put("CLIENT_VAR", TextUtils.isEmpty(Api.VERSION_NAME)?"1.0.0":Api.VERSION_NAME);
headers.put("HCM-API-TYPE", "WRITE");
headers.put("HCM-API-AK", Api.ATOKEN);
headers.put("HCM-API-SK", Api.STOKEN);
headers.put("CLIENT_TYPE", Utils.getClientStr());
headers.put("AUTHORIZATION", Api.getJwt());
//headers.put("cookie", cookieStore);
HttpParams params = new HttpParams();
params.put("User-Agent", Global.usergent); //param支持中文,直接传,不要自己编码
params.put("CLIENT_VAR", TextUtils.isEmpty(Api.VERSION_NAME)?"1.0.0":Api.VERSION_NAME);
params.put("CLIENT_TYPE", Utils.getClientStr());
OkGo.getInstance().init(this)
//.setOkHttpClient(builder.build()) //建议设置OkHttpClient,不设置将使用默认的
//.setCacheMode(CacheMode.NO_CACHE) //全局统一缓存模式,默认不使用缓存,可以不传
//.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局统一缓存时间,默认永不过期,可以不传
//.setRetryCount(3) //全局统一超时重连次数,默认为三次,那么最差的情况会请求4次(一次原始请求,三次重连请求),不需要可以设置为0
.addCommonHeaders(headers) //全局公共头
.addCommonParams(params); //全局公共参数;
OkHttpClient.Builder builder = new OkHttpClient.Builder();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("API4HCM_USER");
//log打印级别,决定了log显示的详细程度
loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.HEADERS);
//log颜色级别,决定了log在控制台显示的颜色
loggingInterceptor.setColorLevel(Level.INFO);
builder.addInterceptor(loggingInterceptor);
//全局的读取超时时间
builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//全局的写入超时时间
builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//全局的连接超时时间
builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//使用sp保持cookie,如果cookie不过期,则一直有效
//cookiejar=new CookieJarImpl(new SPCookieStore(this));
builder.cookieJar(new CookieJarImpl(new SPCookieStore(this)));
//方法一:信任所有证书,不安全有风险
//HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();
//方法二:自定义信任规则,校验服务端证书
//HttpsUtils.SSLParams sslParams2 = HttpsUtils.getSslSocketFactory(new SafeTrustManager());
//方法三:使用预埋证书,校验服务端证书(自签名证书)
//HttpsUtils.SSLParams sslParams3 = HttpsUtils.getSslSocketFactory(getAssets().open("srca.cer"));
//方法四:使用bks证书和密码管理客户端证书(双向认证),使用预埋证书,校验服务端证书(自签名证书)
//HttpsUtils.SSLParams sslParams4 = HttpsUtils.getSslSocketFactory(getAssets().open("xxx.bks"), "123456", getAssets().open("yyy.cer"));
//builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);
//配置https的域名匹配规则,详细看demo的初始化介绍,不需要就不要加入,使用不当会导致https握手失败
//builder.hostnameVerifier(new SafeHostnameVerifier());
/* //必须调用初始化
OkGo.init(this);
//以下设置的所有参数是全局参数,同样的参数可以在请求的时候再设置一遍,那么对于该请求来讲,请求中的参数会覆盖全局参数
//好处是全局参数统一,特定请求可以特别定制参数
try {
//以下都不是必须的,根据需要自行选择,一般来说只需要 debug,缓存相关,cookie相关的 就可以了
OkGo.getInstance()
//打开该调试开关,控制台会使用 红色error 级别打印log,并不是错误,是为了显眼,不需要就不要加入该行
.debug("OkGo")
//如果使用默认的 60秒,以下三行也不需要传
.setConnectTimeout(OkGo.DEFAULT_MILLISECONDS) //全局的连接超时时间
.setReadTimeOut(OkGo.DEFAULT_MILLISECONDS) //全局的读取超时时间
.setWriteTimeOut(OkGo.DEFAULT_MILLISECONDS) //全局的写入超时时间
//可以全局统一设置缓存模式,默认是不使用缓存,可以不传,具体其他模式看 github 介绍 https://github.com/jeasonlzy/
.setCacheMode(CacheMode.NO_CACHE)
//可以全局统一设置缓存时间,默认永不过期,具体使用方法看 github 介绍
.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
//如果不想让框架管理cookie,以下不需要
// .setCookieStore(new MemoryCookieStore()) //cookie使用内存缓存(app退出后,cookie消失)
.setCookieStore(new PersistentCookieStore()); //cookie持久化存储,如果cookie不过期,则一直有效
//可以设置https的证书,以下几种方案根据需要自己设置,不需要不用设置
// .setCertificates() //方法一:信任所有证书
// .setCertificates(getAssets().open("srca.cer")) //方法二:也可以自己设置https证书
// .setCertificates(getAssets().open("aaaa.bks"), "123456", getAssets().open("srca.cer"))//方法三:传入bks证书,密码,和cer证书,支持双向加密
//可以添加全局拦截器,不会用的千万不要传,错误写法直接导致任何回调不执行
// .addInterceptor(new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// return chain.proceed(chain.request());
// }
// })
//这两行同上,不需要就不要传
//.addCommonHeaders(headers) //设置全局公共头
//.addCommonParams(params); //设置全局公共参数
} catch (Exception e) {
e.printStackTrace();
}
*/
}
//CookieJarImpl cookiejar;
@Override
public void onCreate() {
SophixManager.getInstance().queryAndLoadNewPatch();
super.onCreate();
/*
默认使用的高度是设备的可用高度,也就是不包括状态栏和底部的操作栏的,如果你希望拿设备的物理高度进行百分比化:
*/
AutoLayoutConifg.getInstance().useDeviceSize();
Api.VERSION_NAME=Utils.getVersionName(getApplicationContext());
// 这里实现SDK初始化,appId替换成你的在Bugly平台申请的appId
// 调试时,将第三个参数改为true
/*app过场*/
Once.initialise(this);
context = this;
Hawk.init(this)
.setEncryptionMethod(HawkBuilder.EncryptionMethod.MEDIUM)
.setStorage(HawkBuilder.newSharedPrefStorage(this))
.setLogLevel(LogLevel.FULL)
.build();
JPushInterface.setDebugMode(true);
JPushInterface.init(this);
//OkHttpFinal
OkHttpFinalConfiguration.Builder builder = new OkHttpFinalConfiguration.Builder();
ClearableCookieJar cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this));
builder.setCookieJar(cookieJar);
OkHttpFinal.getInstance().init(builder.build());
//okGo
initOkGo();
//Logger.init(Api.packagename);
Logger.init(Utils.TAG+"-Hawk-");
//OkLogger
PlatformConfig.setWeixin("", "");
//微信 appid appsecret
PlatformConfig.setSinaWeibo(" ", " ");
//新浪微博 appkey appsecret
PlatformConfig.setQQZone("", "");
if(AccountInfo.getInstance().isExist()){
if(!Utils.isEmpty(AccountInfo.getInstance().loadAccount().token)){
RongIM.init(this, AccountInfo.getInstance().loadAccount().rongcloud.appkey);//初始化聊天模块
}
}
//当程序发生Uncaught异常时捕获
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e) {
//做你要做的处理,比如把e.getMessage()保存到文件,发送一个email等等,不是本篇重点,不再赘述
int crash_count=Hawk.get("crash_count",0);
Utils.syso("===="+crash_count);
if(crash_count>=1){
Hawk.put("crash_count",0);
clearAppUserData(Api.packagename);
}else {
Hawk.put("crash_count",++crash_count);
Utils.saveCrashInfo2File(new Exception("thread:"+thread,e));
MobclickAgent.onKillProcess(getApplicationContext());
System.exit(1);
}
//无效 发现sophix内部监听crash异常的优先级比这个高 它发现就清除补丁,之后看有没更好的办法,异常也去加载补丁
//SophixManager.getInstance().killProcessSafely();
}});
//bugly init
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
if(Api.isLog) System.out.println("oreo this app channel : "+channel);
//在代码中配置友盟Channel
MobclickAgent. startWithConfigure(new MobclickAgent.UMAnalyticsConfig(this.getApplicationContext(),"",channel));
//测试环境输出友盟日志
MobclickAgent.setDebugMode(Api.isLog);
//测试环境不统计错误(false 为不统计)
MobclickAgent.setCatchUncaughtExceptions(!Api.isLog);
initBugly(channel);
}
public Process clearAppUserData(String packageName) {
Process p = execRuntimeProcess("pm clear " + packageName);
return p;
}
public Process execRuntimeProcess(String commond) {
Process p = null;
try {
p = Runtime.getRuntime().exec(commond);
} catch (IOException e) {
e.printStackTrace();
}
return p;
}
private void initBugly(String channel){
Beta.autoCheckUpgrade = true;//true为自动检查更新
Bugly.init(this.getApplicationContext(), Api.BUGLYKEY, Api.isLog);
//设置当前为开发设备
//Bugly.setIsDevelopmentDevice(this, true);
Bugly.setAppChannel(this, channel);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// you must install multiDex whatever tinker is installed!
if(mInstance==null)mInstance=this;
if(!Api.isDebug)initSopHix();
MultiDex.install(base);
// 安装tinker
//Beta.installTinker();
}
/**
阿里sophix热修复
*/
private void initSopHix(){
String appVersion="1.0.0";
try {
appVersion=this.getPackageManager().getPackageInfo(this.getPackageName(),0).versionName;
}catch (Exception e){
e.printStackTrace();
}
SophixManager.getInstance().setContext(this)
.setSecretMetaData(Api.SOPHIX_ID,Api.SOPHIX_KEY,Api.SOPHIX_RSA) //代码设置id,key,rsa
.setAppVersion(appVersion)
.setAesKey(null)
.setEnableDebug(Api.isLog)
.setPatchLoadStatusStub(new PatchLoadStatusListener() {
@Override
public void onLoad(final int mode, final int code, final String info, final int handlePatchVersion) {
if (sophixEvent != null) {
sophixEvent.handle(mode,code,info,handlePatchVersion);
}
System.out.println("oreo sophix"+"mode = "+mode+"info = "+ info);
// 补丁加载回调通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明补丁加载成功
System.out.println("oreo sophix"+"表明补丁加载成功");
} else if (code == PatchStatus.CODE_LOAD_RELAUNCH) {
// 表明新补丁生效需要重启. 开发者可提示用户或者强制重启;
// 建议: 用户可以监听进入后台事件, 然后应用自杀
System.out.println("oreo sophix"+"用户可以监听进入后台事件, 然后应用自杀");
} else if (code == PatchStatus.CODE_LOAD_FAIL) {
// 内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载
//SophixManager.getInstance().cleanPatches();
System.out.println("oreo sophix"+"内部引擎异常, 推荐此时清空本地补丁, 防止失败补丁重复加载");
} else {
// 其它错误信息, 查看PatchStatus类说明
System.out.println("oreo sophix"+" 其它错误信息, 查看PatchStatus类说明");
}
}
}).initialize();
}
/*
【0907 放弃,因为第三方的key跟app包名绑定】
beta包正式环境下,动态配置配置SDK
*/
/*private void forBetaOfOtherSDK(){
try {
ApplicationInfo ai = getPackageManager().getApplicationInfo(Api.packagename,
PackageManager.GET_META_DATA);
//极光
ai.metaData.putString("JPUSH_APPKEY","239b3fbf21575861caecae55");
//
*//*ComponentName cn=new ComponentName(this, Av_CancelOrder.class);
ActivityInfo info=getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
String value = info.metaData.getString("receiver_meta_data");*//*
// ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(),
//PackageManager.GET_META_DATA);
}catch (Exception e){
e.printStackTrace();
}
}*/
}
空指针了,检查下下面这段代码
还有 Thread.setDefaultUncaughtExceptionHandler 这个放在 onCreate 方法的第一行,不然前面的异常捕获不到。