一、 MyApplication类的编写:

新建一个类MyApplication,继承自Application。代码如下:

MyApplication.java:

 package com.smyhvae.homepicdemo;

 import android.app.Application;
import android.os.Handler;
import android.os.Looper; /**
* Created by smyhvae on 2015/5/13.
*/
public class MyApplication extends Application {
//获取到主线程的上下文
private static MyApplication mContext = null;
//获取到主线程的handler
private static Handler mMainThreadHandler = null;
//获取到主线程的looper
private static Looper mMainThreadLooper = null;
//获取到主线程
private static Thread mMainThead = null;
//获取到主线程的id
private static int mMainTheadId; @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
this.mContext = this;
this.mMainThreadHandler = new Handler();
this.mMainThreadLooper = getMainLooper();
this.mMainThead = Thread.currentThread();
//android.os.Process.myUid() 获取到用户id
//android.os.Process.myPid()获取到进程id
//android.os.Process.myTid()获取到调用线程的id
this.mMainTheadId = android.os.Process.myTid();
} public static MyApplication getApplication() {
return mContext;
} public static Handler getMainThreadHandler() {
return mMainThreadHandler;
} public static Looper getMainThreadLooper() {
return mMainThreadLooper;
} public static Thread getMainThread() {
return mMainThead;
} public static int getMainThreadId() {
return mMainTheadId;
} }

上面的所有代码每次在开发一个新的app时都需要用到的,然后具体到不同的项目,再继续添加不同的东西。

然后记得在清单文件中进行声明:

     <application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name=".MyApplication">

需要声明的是上方代码的第6行android:name的属性。

二、UI工具类的编写:

这个工具类也是在app开发中经常用到的。可以直接copy。代码如下:

UIUtils.java:

 package com.smyhvae.homepicdemo.utils;

 import android.content.Context;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View; import com.smyhvae.homepicdemo.MyApplication; /**
* Created by smyhvae on 2015/5/13.
*/ public class UIUtils { public static Context getContext() {
return MyApplication.getApplication();
} public static Thread getMainThread() {
return MyApplication.getMainThread();
} public static long getMainThreadId() {
return MyApplication.getMainThreadId();
} /** dip转换px */
public static int dip2px(int dip) {
final float scale = getContext().getResources().getDisplayMetrics().density;
return (int) (dip * scale + 0.5f);
} /** pxz转换dip */
public static int px2dip(int px) {
final float scale = getContext().getResources().getDisplayMetrics().density;
return (int) (px / scale + 0.5f);
} /** 获取主线程的handler */
public static Handler getHandler() {
return MyApplication.getMainThreadHandler();
} /** 延时在主线程执行runnable */
public static boolean postDelayed(Runnable runnable, long delayMillis) {
return getHandler().postDelayed(runnable, delayMillis);
} /** 在主线程执行runnable */
public static boolean post(Runnable runnable) {
return getHandler().post(runnable);
} /** 从主线程looper里面移除runnable */
public static void removeCallbacks(Runnable runnable) {
getHandler().removeCallbacks(runnable);
} public static View inflate(int resId){
return LayoutInflater.from(getContext()).inflate(resId,null);
} /** 获取资源 */
public static Resources getResources() { return getContext().getResources();
} /** 获取文字 */
public static String getString(int resId) {
return getResources().getString(resId);
} /** 获取文字数组 */
public static String[] getStringArray(int resId) {
return getResources().getStringArray(resId);
} /** 获取dimen */
public static int getDimens(int resId) {
return getResources().getDimensionPixelSize(resId);
} /** 获取drawable */
public static Drawable getDrawable(int resId) {
return getResources().getDrawable(resId);
} /** 获取颜色 */
public static int getColor(int resId) {
return getResources().getColor(resId);
} /** 获取颜色选择器 */
public static ColorStateList getColorStateList(int resId) {
return getResources().getColorStateList(resId);
}
//判断当前的线程是不是在主线程
public static boolean isRunInMainThread() {
return android.os.Process.myTid() == getMainThreadId();
} public static void runInMainThread(Runnable runnable) {
if (isRunInMainThread()) {
runnable.run();
} else {
post(runnable);
}
} public static void startActivity(Intent intent){
// BaseActivity activity = BaseActivity.getForegroundActivity();
// if(activity != null){
// activity.startActivity(intent);
// }else{
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// getContext().startActivity(intent);
// }
} /** 对toast的简易封装。线程安全,可以在非UI线程调用。 */
public static void showToastSafe(final int resId) {
showToastSafe(getString(resId));
} /** 对toast的简易封装。线程安全,可以在非UI线程调用。 */
public static void showToastSafe(final String str) {
if (isRunInMainThread()) {
showToast(str);
} else {
post(new Runnable() {
@Override
public void run() {
showToast(str);
}
});
}
} private static void showToast(String str) {
// BaseActivity frontActivity = BaseActivity.getForegroundActivity();
// if (frontActivity != null) {
// Toast.makeText(frontActivity, str, Toast.LENGTH_LONG).show();
// }
}
}

Android代码优化----Application节点的模板写法及UI工具类的更多相关文章

  1. Android快捷便利但不常被使用的原生工具类

    Android快捷便利但不常被使用的原生工具类 Android SDK原生 API中,有一些常用的工具类,运用得当可以省事省力省时,何况还是Android官方提供的,现在收集整理一些出来.DateUt ...

  2. 我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类

    下面是一个工具类,提供了dp.sp.px之间相互转化的方法. import android.content.Context; /** * dp.sp 转换为 px 的工具类<br> * & ...

  3. 从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现

    相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人 ...

  4. Android之2D图形(圆、直线、点)工具类 (持续更新)

    public class Circle { private PointF centerPoint; private float radius; public PointF getCenterPoint ...

  5. Android 开发工具类 35_PatchUtils

    增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...

  6. 转--Android中调用webservice的工具类

    最近学习WebService,感觉利用这个借口开发网站的Android客户端方便及了,用到一个工具类,这里铭记一下. public static final String WebServiceName ...

  7. Android工具类整合

    Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...

  8. android 文件读写工具类

    将可以序列化的对象通过base64编码后进行保存 但是感觉多数情况下,不需要采用这个功能,直接保存原始的json字符串,取出来之后再进行解析即可 package com.wotlab.home.mon ...

  9. Android代码优化----PullToRefresh+universal-image-loader实现从网络获取数据并刷新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. R语言-神经网络包RSNNS

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  2. Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法

    Eclipse 出现Some sites could not be found.  See the error log for more detail.错误 解决方法 Some sites could ...

  3. SQL数据库基础(一)

    数据库: 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(Data ...

  4. docker 使用

    https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-docker-application http ...

  5. Vue列表渲染

    gitHub地址:https://github.com/lily1010/vue_learn/tree/master/lesson09 一 for循环数组 <!DOCTYPE html> ...

  6. 常用 windows运行命令

    winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 wscript--- ...

  7. win7操作技巧

    Q : 打开文件夹默认最大化A :随便打开一个文件夹 鼠标移动到左上角 然后点击鼠标左键 选择“最大化” 后关闭 之后每次打开就是最大化了

  8. JavaScript Patterns 3.7 Primitive Wrappers

    Primitive value types: number, string, boolean, null, and undefined. // a primitive number var n = 1 ...

  9. "ORA-12154: TNS:could not resolve the connect identifier specified"的解决办法

    添加环境变量解决: 变量名:TNS_ADMIN 变量值:D:\Ocl\product\11.2.0\dbhome_1\NETWORK\ADMIN tnsnames.ora所在的路径

  10. 【mysql】关于innodb_file_format

    一.几条mysql命令 通过以下命令看一下mysql中 innodb_file_format的配置 mysql> show engines; +--------------------+---- ...