**
MyApplication+UIUtils
**
俗话说得好,工欲善其技,必先利其器,我们在开发一个程序之前也是一样。如果想在开发的过程中没那么辛苦的话,前期的准备工作一定要做足。做过程序的都知道,我们在开发之前都会封装一些强大的基类和帮助类,以便在开发时可以得闲应手,这篇文章主要是把我做的前一个项目的MyApplication+BaseActivity+UIUtils类拿出来和大家分享一下。
1.MyApplication
MyApplication因为是在程序的一开始就会执行的,所以我们会在它 的oncreat()方法里面做一些初始化的工作,很多的第三方类库的使用也需要在程序开始的时候初始化,所以在这些工作在里面去做就肯定不会错。不说了,上代码。
public class MyApplication extends Application {
private static Context mContext;
private static Handler mHandler;
private static long mMainThreadId;
private ArrayList<FragmentActivity> activities;
private MyApplication mApplication;
private static boolean firstTimeDistination = true;
String member_id;
/**
* 得到上下文
*/
public static Context getContext() {
return mContext;
}
/**
* 得到主线程的handler
*/
public static Handler getHandler() {
return mHandler;
}
/**
* 得到主线程的id
*/
public static long getMainThreadId() {
return mMainThreadId;
}
public static boolean getFirstTimeDistination() {
return firstTimeDistination;
}
// public static int getStatusHeight(){
// return mStatusHeight;
// }
@Override
public void onCreate() {//程序的入口方法
//获取状态栏高度
//mStatusHeight = getStatusHeight((Activity) mContext);
//1.上下文
mContext = getApplicationContext();
//2.得到主线程的handler
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
//3.得到主线程的id
mMainThreadId = android.os.Process.myTid();
/**
Tid: Thread
Uid:User
Pid:Process
*/
super.onCreate();
activities = new ArrayList<FragmentActivity>();
mApplication = this;
}
public MyApplication getApplication() {
return mApplication;
}
/**
* 把所有页面添加到统一列表管理
*
* @param instance
*/
public void addInstance(FragmentActivity instance) {
activities.add(instance);
}
/**
* 关闭所有页面
*
* @param instance activity实例对象
*/
public void removeInstance(FragmentActivity instance) {
activities.remove(instance);
}
/**
* 退出 关闭所有页面并杀死所有线程,一般是在程序双击退出的时候用
*/
public void exit() {
try {
for (FragmentActivity activity : activities) {
if (activity != null) {
activity.finish();
}
}
} catch (Exception e) {
} finally {
android.os.Process.killProcess(Process.myPid());
System.exit(0);
}
}
}
说明:
因为addInstance()和removeInstance()是每一个Activity都要执行的操作,所以我们会在BaseActivity中执行这两个操作,瞬间觉得代码简洁多了。
2.UIUtils
UIUtils 相信这个谁都写过了吧,废话不多说,直接上代码。
public class UIUtils {
private static String member_id;
/**
* 得到上下文
*/
public static Context getContext() {
return MyApplication.getContext();
}
/**
* 得到Resource对象
*/
public static Resources getResources() {
return getContext().getResources();
}
/**
* 得到String.xml中的字符
*/
public static String getString(int resId) {
return getResources().getString(resId);
}
/**
* 得到String.xml中的字符数组
*/
public static String[] getStrings(int resId) {
return getResources().getStringArray(resId);
}
/**
* 得到color.xml中的颜色信息
*/
public static int getColor(int resId) {
return getResources().getColor(resId);
}
/**
* 得到应用程序的包名
*
* @return
*/
public static String getPackageName() {
return getContext().getPackageName();
}
/**
* 得到主线程的线程id
*
* @return
*/
public static long getMainThreadId() {
return MyApplication.getMainThreadId();
}
/**
* 得到主线程的Handler对象
*/
public static Handler getMainThreadHandler() {
return MyApplication.getHandler();
}
/**
* 安全的执行一个任务
* 1.当前任务所在线程子线程-->使用消息机制发送到主线程执行
* 2.当前任务所在线程主线程-->直接执行
*/
public static void postTask(Runnable task) {
//得到当前线程的线程id
long curThreadId = android.os.Process.myTid();
long mainThreadId = getMainThreadId();
if (curThreadId == mainThreadId) {//主线程
task.run();
} else {//子线程
getMainThreadHandler().post(task);
}
}
/**
* 判断一个服务是否开启
* @param mContext 上下文
* @param serviceName 服务名,包名.服务类名
* @return 是否开启
*/
public static boolean isServiceWork(Context mContext, String serviceName) {
boolean isWork = false;
ActivityManager activityManager = (ActivityManager) mContext
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> myList = activityManager.getRunningServices(Integer.MAX_VALUE);
if (myList.size() <= 0) {
return false;
}
for (int i = 0; i < myList.size(); i++) {
String mName = myList.get(i).service.getClassName().toString();
if (mName.equals(serviceName)) {
isWork = true;
break;
}
}
return isWork;
}
// ///////////////通过布局文件加载布局对象///////////////////
public static View inflate(int layoutId) {
return View.inflate(getContext(), layoutId, null);
}
public static float dp2px( float dp) {
final float scale = getContext().getResources().getDisplayMetrics().density;
return (int)(dp * scale + 0.5f);
}
public static float sp2px(float sp) {
final float scale = getContext().getResources().getDisplayMetrics().scaledDensity;
return sp * scale;
}
public static int getScreenWidth() {
WindowManager windowManager = (WindowManager) getContext().getSystemService(Context
.WINDOW_SERVICE);
int screenWidth = windowManager.getDefaultDisplay().getWidth();
return screenWidth;
}
public static int getScreenHeight() {
WindowManager windowManager = (WindowManager) getContext().getSystemService(Context
.WINDOW_SERVICE);
int screenHight = windowManager.getDefaultDisplay().getHeight();
return screenHight;
}
//获取会话token
public static Map<String, String> getHeaderMap() {
Map<String, String> headerMap = new HashMap<>();
String token = BaseRequestUtil.getToken(getContext());
headerMap.put(BaseRequestUtil.REQUEST_TOKEN_PARAMS, token);
String imei = DeviceUtils.getIMEI(getContext());
headerMap.put(BaseRequestUtil.REQUEST_DEVICE_ID, imei);
String sessionid = BaseRequestUtil.getSessionid();
if (!sessionid.equals("")) {
headerMap.put(BaseRequestUtil.REQUEST_SESSION_ID, sessionid);
}
return headerMap;
}
//将hashMap转为字符串
public static String convertRequest(Map<String, String> valueMap) {
String jsonString;
try {
JSONObject json = new JSONObject();
for (String key : valueMap.keySet()) {
json.put(key, valueMap.get(key));
}
jsonString = json.toString().trim();
LogUtils.d("jsonString是:" + jsonString);
} catch (JSONException e) {
e.printStackTrace();
jsonString = "";
}
return jsonString;
}
}
好了,这次就讲到这里,希望对你有用,转载请说明出处。