package skytv_com.banking.enjoymovie; import java.util.Properties; import android.app.Activity; import android.app.ActivityManager; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.Application; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.SharedPreferences; import android.os.Handler; import android.os.Process; import android.text.TextUtils; import skytv_com.banking.enjoymovie.R; import com.banking.xc.config.Configuration; import com.banking.xc.database.table.CityTable; import com.banking.xc.utils.CommonUtil; import com.banking.xc.utils.DPIUtil; import com.banking.xc.utils.Log; import com.banking.xc.utils.MyActivity; import com.banking.xc.utils.staticinfo.CityUtil; import com.banking.xc.utils.staticinfo.FlightAirLineUtil; import com.banking.xc.utils.staticinfo.FlightCityUtil; import com.banking.xc.utils.user.UserUtil; public class MyApplication extends Application { public static boolean isShowActivity; private static MyApplication instance; private MainActivity mainActivity; private Handler handler; private Thread uiThread; public int networkInitializationState = 0;// 0:未曾初始化,1:正在初始化,2:已经初始化 private static ActivityManager activityManager; public static MyApplication getInstance() { return instance; } @Override public void onCreate() { if (Log.D) { Log.d("Temp", "MyApplication onCreate() -->> Process.myPid() " + Process.myPid()); } super.onCreate(); instance = this; //Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler(this));// 处理未捕获异常 //UserUtil.getUserByUniqueID("banking17173@126.com");// /*UserUtil.initializeUser(); CityUtil.saveCityToFile();*/ DPIUtil.setDensity(this.getResources().getDisplayMetrics().density); handler = new Handler(); uiThread = Thread.currentThread(); activityManager = (ActivityManager) instance.getSystemService(Context.ACTIVITY_SERVICE); dataInit(); } private void dataInit() { //FlightAirLineUtil.initializeFlightAirline(); //FlightCityUtil.initializeFlightCity(); } public MainActivity getMainActivity() { return mainActivity; } public void setMainActivity(MainActivity mainActivity) { this.mainActivity = mainActivity; } public MyActivity getCurrentMyActivity() { if (Log.D) { Log.d("Temp", "xxx mainActivity -->> " + mainActivity); } if (null != mainActivity) { Activity activity = mainActivity.getCurrentActivity(); if (Log.D) { Log.d("Temp", "xxx activity -->> " + activity); } if (activity instanceof MyActivity) { return (MyActivity) activity; } } return null; } /** * 退出对话框 */ public static void exitDialog() { if (Log.D) { Log.d("Temp", "exitDialog() -->> "); } final boolean hasBackground = true; if (Log.D) { Log.d("Temp", "exitDialog() hasBackground -->> " + hasBackground); } final MainActivity mainActivity = getInstance().getMainActivity(); AlertDialog alertDialog = new Builder(mainActivity).create(); alertDialog.setMessage(mainActivity.getText(R.string.exit_confrim_string)); alertDialog.setTitle(R.string.menu_exit); OnClickListener listener = new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE:// 退出(左) if (hasBackground) {// 如果存在后台 exitAll(); } else { exit(); } break; case DialogInterface.BUTTON_NEGATIVE:// 取消(右) dialog.dismiss(); break; default: break; } } }; alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,// mainActivity.getString(R.string.exit),// 退出(左) listener); alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, // mainActivity.getString(R.string.cancel), // 取消(右) listener); alertDialog.show(); } /** * 正常退出(根据当前应用设置情况,自动判断是否保留后台进程) */ public static void exit() { if (Log.D) { Log.d("Temp", "MyApplication exit() -->> "); } // 强制杀掉前台进程 killStage(); } /** * 强制退出(杀后台进程,不更新widget和message) */ public static void exitAll() { if (Log.D) { Log.d("Temp", "MyApplication exitAll() -->> "); } // // 让后台进程去清理缓存文件 // clearCache(); // 强制杀掉后台进程 killBackground(); // 强制杀掉前台进程 killStage(); } /** * 强制杀掉前台进程 */ public static void killStage() { if (Log.D) { Log.d("Temp", "MyApplication killStage() -->> "); } // 结束界面 // mainActivity.finishThis();(改为杀进程,因此注释掉。2011-06-08) instance.setMainActivity(null);// 无论是否杀界面进程都必须清理,因为即使杀界面进程仍存在 instance.networkInitializationState = 0;// 无论是否杀界面进程都必须清理,因为即使杀界面进程仍存在 Process.killProcess(Process.myPid()); } public synchronized static void killStageNoUI() { if (Log.D) { Log.d("Temp", "MyApplication killStageNoUI() -->> "); } if (null == MyApplication.getInstance().getMainActivity()) { if (Log.D) { Log.d("Temp", " killSelfMethod -->> kell!"); } instance.setMainActivity(null);// 无论是否杀界面进程都必须清理,因为即使杀界面进程仍存在 instance.networkInitializationState = 0;// 无论是否杀界面进程都必须清理,因为即使杀界面进程仍存在 activityManager.restartPackage(instance.getPackageName());// 只杀后台进程 } } /** * 强制杀掉后台进程(如果正在清理缓存文件,那么会在清理缓存文件后自杀) */ public static void killBackground() { if (Log.D) { Log.d("Temp", "MyApplication killBackground() -->> "); } Intent i = new Intent(); MyApplication.getInstance().startService(i); } public static String getAId() { String ret = android.provider.Settings.System.getString(instance.getContentResolver(), // android.provider.Settings.System.ANDROID_ID); return ret; } public Handler getHandler() { return handler; } public Thread getUiThread() { return uiThread; } }