/******************************************************************************* * Copyright 2011-2013 Sergey Tarasevich * <p/> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ package com.wenming.weiswift; import android.app.Activity; import android.app.Application; import android.content.Context; import android.os.Bundle; import android.support.v7.app.AppCompatDelegate; import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.assist.QueueProcessingType; import com.wenming.library.LogReport; import com.wenming.library.save.imp.CrashWriter; import com.wenming.library.upload.email.EmailReporter; import com.wenming.weiswift.utils.LogUtil; import com.wenming.weiswift.utils.SharedPreferencesUtil; import java.util.LinkedList; import java.util.List; public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks { private List<Activity> mActivityList = new LinkedList<Activity>(); public static void initImageLoader(Context context) { ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context); config.threadPriority(Thread.NORM_PRIORITY - 2); config.denyCacheImageMultipleSizesInMemory(); config.memoryCache(new WeakMemoryCache()); config.memoryCacheSize(20 * 1024 * 1024);//设置内存缓存的最大字节数为 App 最大可用内存的 1/8。 config.diskCacheSize(200 * 1024 * 1024); // 200 MiB config.tasksProcessingOrder(QueueProcessingType.LIFO); config.writeDebugLogs(); // Remove for release app ImageLoader.getInstance().init(config.build()); } @Override public void onCreate() { super.onCreate(); //LeakCanary.install(this); initImageLoader(getApplicationContext()); registerActivityLifecycleCallbacks(this); initCrashReport(); //使用亮色(light)主题,不使用夜间模式 boolean setNightMode = (boolean) SharedPreferencesUtil.get(this, "setNightMode", false); LogUtil.d("setNightMode = " + setNightMode); if (setNightMode) { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); } else { AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); } //AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO); } private void initCrashReport() { initEmailReporter(); LogReport.getInstance() .setCacheSize(30 * 1024 * 1024)//支持设置缓存大小,超出后清空 .setLogDir(getApplicationContext(), "sdcard/" + this.getString(this.getApplicationInfo().labelRes) + "/")//定义路径为:sdcard/[app name]/ .setWifiOnly(true)//设置只在Wifi状态下上传,设置为false为Wifi和移动网络都上传 .setLogSaver(new CrashWriter(getApplicationContext()))//支持自定义保存崩溃信息的样式 //.setEncryption(new AESEncode()) //支持日志到AES加密或者DES加密,默认不开启 .init(getApplicationContext()); } public void finishAll() { for (Activity activity : mActivityList) { if (!activity.isFinishing()) { activity.finish(); } } } public void recreateAll() { for (Activity activity : mActivityList) { if (!activity.isFinishing()) { activity.recreate(); } } } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { LogUtil.d("OnCreate = " + activity.getLocalClassName()); mActivityList.add(activity); } @Override public void onActivityStarted(Activity activity) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityStopped(Activity activity) { } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { LogUtil.d("OnDestroyed = " + activity.getLocalClassName()); mActivityList.remove(activity); } /** * 使用EMAIL发送日志 */ private void initEmailReporter() { EmailReporter email = new EmailReporter(this); email.setReceiver("wenmingvs@gmail.com");//收件人 email.setSender("wenmingvs@163.com");//发送人邮箱 email.setSendPassword("apptest1234");//用于登录第三方的邮件授权码 email.setSMTPHost("smtp.163.com");//SMTP地址 email.setPort("465");//SMTP 端口 LogReport.getInstance().setUploadType(email); } }