1,測(cè)試反饋app連續(xù)閃退, 一打開(kāi)就閃退,無(wú)限循環(huán),可我明明已經(jīng)做了閃退3次就清數(shù)據(jù),閃退3次后根本沒(méi)清數(shù)據(jù),不知道是沒(méi)捕獲到還是什么
2,我有兩個(gè)問(wèn)題需要大家?guī)兔?,第一是什么?dǎo)致app連續(xù)閃退,第二,我明明寫(xiě)了Thread.UncaughtExceptionHandler捕獲代碼為什么沒(méi)捕獲到
以下是閃退后到日志:
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 其它錯(cuò)誤信息, 查看PatchStatus類(lèi)說(shuō)明
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()) //建議設(shè)置OkHttpClient,不設(shè)置將使用默認(rèn)的
//.setCacheMode(CacheMode.NO_CACHE) //全局統(tǒng)一緩存模式,默認(rèn)不使用緩存,可以不傳
//.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE) //全局統(tǒng)一緩存時(shí)間,默認(rèn)永不過(guò)期,可以不傳
//.setRetryCount(3) //全局統(tǒng)一超時(shí)重連次數(shù),默認(rèn)為三次,那么最差的情況會(huì)請(qǐng)求4次(一次原始請(qǐng)求,三次重連請(qǐng)求),不需要可以設(shè)置為0
.addCommonHeaders(headers) //全局公共頭
.addCommonParams(params); //全局公共參數(shù);
OkHttpClient.Builder builder = new OkHttpClient.Builder();
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("API4HCM_USER");
//log打印級(jí)別,決定了log顯示的詳細(xì)程度
loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.HEADERS);
//log顏色級(jí)別,決定了log在控制臺(tái)顯示的顏色
loggingInterceptor.setColorLevel(Level.INFO);
builder.addInterceptor(loggingInterceptor);
//全局的讀取超時(shí)時(shí)間
builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//全局的寫(xiě)入超時(shí)時(shí)間
builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//全局的連接超時(shí)時(shí)間
builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
//使用sp保持cookie,如果cookie不過(guò)期,則一直有效
//cookiejar=new CookieJarImpl(new SPCookieStore(this));
builder.cookieJar(new CookieJarImpl(new SPCookieStore(this)));
//方法一:信任所有證書(shū),不安全有風(fēng)險(xiǎn)
//HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();
//方法二:自定義信任規(guī)則,校驗(yàn)服務(wù)端證書(shū)
//HttpsUtils.SSLParams sslParams2 = HttpsUtils.getSslSocketFactory(new SafeTrustManager());
//方法三:使用預(yù)埋證書(shū),校驗(yàn)服務(wù)端證書(shū)(自簽名證書(shū))
//HttpsUtils.SSLParams sslParams3 = HttpsUtils.getSslSocketFactory(getAssets().open("srca.cer"));
//方法四:使用bks證書(shū)和密碼管理客戶端證書(shū)(雙向認(rèn)證),使用預(yù)埋證書(shū),校驗(yàn)服務(wù)端證書(shū)(自簽名證書(shū))
//HttpsUtils.SSLParams sslParams4 = HttpsUtils.getSslSocketFactory(getAssets().open("xxx.bks"), "123456", getAssets().open("yyy.cer"));
//builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);
//配置https的域名匹配規(guī)則,詳細(xì)看demo的初始化介紹,不需要就不要加入,使用不當(dāng)會(huì)導(dǎo)致https握手失敗
//builder.hostnameVerifier(new SafeHostnameVerifier());
/* //必須調(diào)用初始化
OkGo.init(this);
//以下設(shè)置的所有參數(shù)是全局參數(shù),同樣的參數(shù)可以在請(qǐng)求的時(shí)候再設(shè)置一遍,那么對(duì)于該請(qǐng)求來(lái)講,請(qǐng)求中的參數(shù)會(huì)覆蓋全局參數(shù)
//好處是全局參數(shù)統(tǒng)一,特定請(qǐng)求可以特別定制參數(shù)
try {
//以下都不是必須的,根據(jù)需要自行選擇,一般來(lái)說(shuō)只需要 debug,緩存相關(guān),cookie相關(guān)的 就可以了
OkGo.getInstance()
//打開(kāi)該調(diào)試開(kāi)關(guān),控制臺(tái)會(huì)使用 紅色error 級(jí)別打印log,并不是錯(cuò)誤,是為了顯眼,不需要就不要加入該行
.debug("OkGo")
//如果使用默認(rèn)的 60秒,以下三行也不需要傳
.setConnectTimeout(OkGo.DEFAULT_MILLISECONDS) //全局的連接超時(shí)時(shí)間
.setReadTimeOut(OkGo.DEFAULT_MILLISECONDS) //全局的讀取超時(shí)時(shí)間
.setWriteTimeOut(OkGo.DEFAULT_MILLISECONDS) //全局的寫(xiě)入超時(shí)時(shí)間
//可以全局統(tǒng)一設(shè)置緩存模式,默認(rèn)是不使用緩存,可以不傳,具體其他模式看 github 介紹 https://github.com/jeasonlzy/
.setCacheMode(CacheMode.NO_CACHE)
//可以全局統(tǒng)一設(shè)置緩存時(shí)間,默認(rèn)永不過(guò)期,具體使用方法看 github 介紹
.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
//如果不想讓框架管理cookie,以下不需要
// .setCookieStore(new MemoryCookieStore()) //cookie使用內(nèi)存緩存(app退出后,cookie消失)
.setCookieStore(new PersistentCookieStore()); //cookie持久化存儲(chǔ),如果cookie不過(guò)期,則一直有效
//可以設(shè)置https的證書(shū),以下幾種方案根據(jù)需要自己設(shè)置,不需要不用設(shè)置
// .setCertificates() //方法一:信任所有證書(shū)
// .setCertificates(getAssets().open("srca.cer")) //方法二:也可以自己設(shè)置https證書(shū)
// .setCertificates(getAssets().open("aaaa.bks"), "123456", getAssets().open("srca.cer"))//方法三:傳入bks證書(shū),密碼,和cer證書(shū),支持雙向加密
//可以添加全局?jǐn)r截器,不會(huì)用的千萬(wàn)不要傳,錯(cuò)誤寫(xiě)法直接導(dǎo)致任何回調(diào)不執(zhí)行
// .addInterceptor(new Interceptor() {
// @Override
// public Response intercept(Chain chain) throws IOException {
// return chain.proceed(chain.request());
// }
// })
//這兩行同上,不需要就不要傳
//.addCommonHeaders(headers) //設(shè)置全局公共頭
//.addCommonParams(params); //設(shè)置全局公共參數(shù)
} catch (Exception e) {
e.printStackTrace();
}
*/
}
//CookieJarImpl cookiejar;
@Override
public void onCreate() {
SophixManager.getInstance().queryAndLoadNewPatch();
super.onCreate();
/*
默認(rèn)使用的高度是設(shè)備的可用高度,也就是不包括狀態(tài)欄和底部的操作欄的,如果你希望拿設(shè)備的物理高度進(jìn)行百分比化:
*/
AutoLayoutConifg.getInstance().useDeviceSize();
Api.VERSION_NAME=Utils.getVersionName(getApplicationContext());
// 這里實(shí)現(xiàn)SDK初始化,appId替換成你的在Bugly平臺(tái)申請(qǐng)的appId
// 調(diào)試時(shí),將第三個(gè)參數(shù)改為true
/*app過(guò)場(chǎng)*/
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);//初始化聊天模塊
}
}
//當(dāng)程序發(fā)生Uncaught異常時(shí)捕獲
Thread.setDefaultUncaughtExceptionHandler (new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException (Thread thread, Throwable e) {
//做你要做的處理,比如把e.getMessage()保存到文件,發(fā)送一個(gè)email等等,不是本篇重點(diǎn),不再贅述
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);
}
//無(wú)效 發(fā)現(xiàn)sophix內(nèi)部監(jiān)聽(tīng)crash異常的優(yōu)先級(jí)比這個(gè)高 它發(fā)現(xiàn)就清除補(bǔ)丁,之后看有沒(méi)更好的辦法,異常也去加載補(bǔ)丁
//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));
//測(cè)試環(huán)境輸出友盟日志
MobclickAgent.setDebugMode(Api.isLog);
//測(cè)試環(huán)境不統(tǒng)計(jì)錯(cuò)誤(false 為不統(tǒng)計(jì))
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為自動(dòng)檢查更新
Bugly.init(this.getApplicationContext(), Api.BUGLYKEY, Api.isLog);
//設(shè)置當(dāng)前為開(kāi)發(fā)設(shè)備
//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熱修復(fù)
*/
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) //代碼設(shè)置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);
// 補(bǔ)丁加載回調(diào)通知
if (code == PatchStatus.CODE_LOAD_SUCCESS) {
// 表明補(bǔ)丁加載成功
System.out.println("oreo sophix"+"表明補(bǔ)丁加載成功");
} else i
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。