博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
04_工具类
阅读量:5149 次
发布时间:2019-06-13

本文共 6379 字,大约阅读时间需要 21 分钟。

 重写Application  ——》BaseApplication
Context
 Thread
 Handler  不应该new太多导致溢出,只要全局一个  (系统优化,主线程只要一个就够了)
 Looper  
   ( long ThreadId) 线程id 
 用户id 两个用户进程若是相互访问,在清单文件中配置 android:shareUserId
    几个常见的UI工具类
上下文获取
获取资源
主线程中执行任务      【   不知道是主线程还是子线程执行()】 
适配器方法: dip2px(int dip)   px2dip(int px)
日志管理(大公司收集用户习惯)
ctrl+O 看方法结构图
//总体的书写思路就是把类的成员变量new出来后,设置他们的get/set访问权利)
public class BaseApplication extends Application
{
    private static Context    mContext;
    private static Thread    mMainThread;
    private static long        mMainThreadId;
    private static Handler    mMainThreadHandler;
    private static Looper    mMainThreadLooper;
    @Override
    public void onCreate()
    {
        super.onCreate();
        // 在应用程序入口提供全局的工具
        // 上下文
        mContext = this;
        // 主线程和子线程
        mMainThread = Thread.currentThread();
        // 主线程id
        // mMainThreadId = mMainThread.getId();
        // android.os.Process.myPid();// 进程id
        mMainThreadId = android.os.Process.myTid();// 当前线程id
        // android.os.Process.myUid();//用户id
        // 主线程handler
        mMainThreadHandler = new Handler();
        //
        mMainThreadLooper = getMainLooper();
    }
    public static Context getContext()
    {
        return mContext;
    }
    public static Thread getMainThread()
    {
        return mMainThread;
    }
    public static long getMainThreadId()
    {
        return mMainThreadId;
    }
    public static Handler getMainThreadHandler()
    {
        return mMainThreadHandler;
    }
    public static Looper getMainThreadLooper()
    {
        return mMainThreadLooper;
    }
}  
public class UIUtils
{
    /**
     * 上下文的获取
     * 
     * @return
     */
    public static Context getContext()
    {
        return BaseApplication.getContext();
    }
    /**
     * 获取资源
     * 
     * @return
     */
    public static Resources getResources()
    {
        return getContext().getResources();
    }
    public static long getMainThreadId()
    {
        return BaseApplication.getMainThreadId();
    }
    public static Handler getMainThreadHandler()
    {
        return BaseApplication.getMainThreadHandler();
    }
    /**
     * 主线程中执行 任务
     * 
     * @param task
     */
    public static void runOnUiThread(Runnable task)
    {
        long currentThreadId = android.os.Process.myTid();
        long mainThreadId = getMainThreadId();
        if (currentThreadId == mainThreadId)
        {
            // 如果在主线程中执行
            task.run();
        }
        else
        {
            // 需要转的主线程执行
            getMainThreadHandler().post(task);
        }
    }
    /**
     * 
     * @param dip
     * @return
     */
    public static int dip2px(int dip)
    {
        // 公式 1: px = dp * (dpi / 160)
        // 公式 2: dp = px / denistity;
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        float density = metrics.density;
        // metrics.densityDpi
        return (int) (dip * density + 0.5f);
    }
    public static int px2dip(int px)
    {
        // 公式 1: px = dp * (dpi / 160)
        // 公式 2: dp = px / denistity;
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        float density = metrics.density;
        // metrics.densityDpi
        return (int) (px / density + 0.5f);
    }
    public static String getString(int resId)
    {
        return getResources().getString(resId);
    }
    public static String getPackageName()
    {
        return getContext().getPackageName();
    }
    public static String[] getStringArray(int resId)
    {
        return getResources().getStringArray(resId);
    }
    public static int getColor(int resId)
    {
        return getResources().getColor(resId);
    }
    /**
     * 执行延时操作
     * 
     * @param task
     * @param delay
     */
    public static void postDelayed(Runnable task, long delay)
    {
        getMainThreadHandler().postDelayed(task, delay);
    }
    /**
     * 移除任务
     * 
     * @param task
     */
    public static void removeCallbacks(Runnable task)
    {
        getMainThreadHandler().removeCallbacks(task);
    }
    /**
     * 开启activity
     * 
     * @param intent
     */
    public static void startActivity(Intent intent)
    {
        getContext().startActivity(intent);
    }
}
public class LogUtils {
    /** 日志输出级别NONE */
    public static final int LEVEL_NONE = 0;
    /** 日志输出级别V */
    public static final int LEVEL_VERBOSE = 1;
    /** 日志输出级别D */
    public static final int LEVEL_DEBUG = 2;
    /** 日志输出级别I */
    public static final int LEVEL_INFO = 3;
    /** 日志输出级别W */
    public static final int LEVEL_WARN = 4;
    /** 日志输出级别E */
    public static final int LEVEL_ERROR = 5;
    /** 日志输出时的TAG */
    private static String mTag = "GooglePlay";
    /** 是否允许输出log */
    private static int mDebuggable = LEVEL_ERROR;
    /** 用于记时的变量 */
    private static long mTimestamp = 0;
    /** 写文件的锁对象 */
    private static final Object mLogLock = new Object();
    /** 以级别为 d 的形式输出LOG */
    public static void v(String msg) {
        if (mDebuggable >= LEVEL_VERBOSE) {
            Log.v(mTag, msg);
        }
    }
    /** 以级别为 d 的形式输出LOG */
    public static void d(String msg) {
        if (mDebuggable >= LEVEL_DEBUG) {
            Log.d(mTag, msg);
        }
    }
    /** 以级别为 i 的形式输出LOG */
    public static void i(String msg) {
        if (mDebuggable >= LEVEL_INFO) {
            Log.i(mTag, msg);
        }
    }
    /** 以级别为 w 的形式输出LOG */
    public static void w(String msg) {
        if (mDebuggable >= LEVEL_WARN) {
            Log.w(mTag, msg);
        }
    }
    /** 以级别为 w 的形式输出Throwable */
    public static void w(Throwable tr) {
        if (mDebuggable >= LEVEL_WARN) {
            Log.w(mTag"", tr);
        }
    }
    /** 以级别为 w 的形式输出LOG信息和Throwable */
    public static void w(String msg, Throwable tr) {
        if (mDebuggable >= LEVEL_WARN && null != msg) {
            Log.w(mTag, msg, tr);
        }
    }
    /** 以级别为 e 的形式输出LOG */
    public static void e(String msg) {
        if (mDebuggable >= LEVEL_ERROR) {
            Log.e(mTag, msg);
        }
    }
    /** 以级别为 e 的形式输出Throwable */
    public static void e(Throwable tr) {
        if (mDebuggable >= LEVEL_ERROR) {
            Log.e(mTag"", tr);
        }
    }
    /** 以级别为 e 的形式输出LOG信息和Throwable */
    public static void e(String msg, Throwable tr) {
        if (mDebuggable >= LEVEL_ERROR && null != msg) {
            Log.e(mTag, msg, tr);
        }
    }
    /**
     * 把Log存储到文件中
     * 
     * @param log
     *            需要存储的日志
     * @param path
     *            存储路径
     */
    public static void log2File(String log, String path) {
        log2File(log, path, true);
    }
    public static void log2File(String log, String path, boolean append) {
        synchronized (mLogLock) {
            FileUtils.writeFile(log + "\r\n", path, append);
        }
    }
    /**
     * 以级别为 e 的形式输出msg信息,附带时间戳,用于输出一个时间段起始点
     * 
     * @param msg
     *            需要输出的msg
     */
    public static void msgStartTime(String msg) {
        mTimestamp = System.currentTimeMillis();
        if (!TextUtils.isEmpty(msg)) {
            e("[Started:" + mTimestamp + "]" + msg);
        }
    }
    /** 以级别为 e 的形式输出msg信息,附带时间戳,用于输出一个时间段结束点* @param msg 需要输出的msg */
    public static void elapsed(String msg) {
        long currentTime = System.currentTimeMillis();
        long elapsedTime = currentTime - mTimestamp;
        mTimestamp = currentTime;
        e("[Elapsed:" + elapsedTime + "]" + msg);
    }
    public static <T> void printList(List<T> list) {
        if (list == null || list.size() < 1) {
            return;
        }
        int size = list.size();
        i("---begin---");
        for (int i = 0; i < size; i++) {
            i(i + ":" + list.get(i).toString());
        }
        i("---end---");
    }
    public static <T> void printArray(T[] array) {
        if (array == null || array.length < 1) {
            return;
        }
        int length = array.length;
        i("---begin---");
        for (int i = 0; i < length; i++) {
            i(i + ":" + array[i].toString());
        }
        i("---end---");
    }
}  

转载于:https://www.cnblogs.com/linmbbest/p/4853307.html

你可能感兴趣的文章
Django之ORM多对多表创建方式,AJAX异步提交,分页器组件等
查看>>
SqlServer查询表名的备注(查询表名描述 MS_Description)
查看>>
【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie
查看>>
数据类型
查看>>
CodeForces - 566F Clique in the Divisibility Graph
查看>>
CodeForces - 986C AND Graph
查看>>
[JZOJ5455]【NOIP2017提高A组冲刺11.6】拆网线
查看>>
【MySql】Order By 排序
查看>>
jQuery选择器
查看>>
spring字符编码filter
查看>>
thinkphp5省市区三级联动例子
查看>>
让HttpClient不要打印巨多的日志
查看>>
[笔记] SQL性能优化 - 常用语句(一)
查看>>
openvino安装踩坑记
查看>>
html03
查看>>
LINQ语法详解
查看>>
DICOM:DICOM3.0网络通信协议
查看>>
分享:FIFO 同步、异步以及Verilog代码实现
查看>>
《构建之法》读书笔记2
查看>>
enum 枚举一般用法 dotnet
查看>>