04_工具类

重写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---");

}

}

来自为知笔记(Wiz)

时间: 2024-10-15 05:53:21

04_工具类的相关文章

Arrays工具类

Arraysd的静态方法能够方便的对数组进行操作,每个方法也加了注释 : 程序: import java.util.*;public class Array{        public static void main(String[] args){                int[]  arr={1,3,4,2};                System.out.println("排序前:");                printArray(arr);//打印原数组

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

(九十五)音效播放方法和工具类的制作

音效通过AVFoundation框架实现,是通过函数而不是方法,因此需要进行桥接等操作,具体步骤如下. 进行音效播放,首先要得到音效的URL(只能是本地音频),然后转换为音效ID(唯一),通过ID播放音效. [音效播放方法] ①导入框架主头文件 #import <AVFoundation/AVFoundation.h> ②通过Bundle拿到本地音效,然后调用AudioServicesCreateSystemSoundID函数得到音效ID,ID为0代表无效,以此为依据可进行懒加载 @inter

spring endpoint工具类

工具类代码 @Controller public class EndpointDocController {     private final RequestMappingHandlerMapping handlerMapping;     @Autowired     public EndpointDocController(RequestMappingHandlerMapping handlerMapping) {         this.handlerMapping = handler

web常用的工具类总结

数据库的链接的操作类 package utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBConnection { private static final String DBDRIVER = "com.m

字符串工具类(指定字符串的长度和判断是否为空等方法)

package com.sec.util; /** * 字符串工具类 * @author Administrator * */public class StringUtil { /** * 过滤<,>,\n 字符串的方法 * @param input * @return */ public static String filterHTML(String input){ if(input == null || input.length() == 0){ return input; } input

java并发的艺术-读书笔记-第八章常用的并发工具类

jdk中提供了几个非常有用的工具类,分别是CountDownLatch,CyclicBarrier和semaphore exchanger CountDownLatch:允许一个或者多个线程等待其他线程完成操作 public class CountDownLatchTest{ static CountDownLatch c = new CountDownLatch(2); public static void main(String[] args){ new Thread(new Runnabl

java分页的实现(后台工具类和前台jsp页面)

1.首先,新建一个类Page.java 1 public class Page implements Serializable { 2 private static final long serialVersionUID = -3198048449643774660L; 3 private int pageNow = 1; // 当前页数 4 private int pageSize = 10; // 每页显示记录的条数 5 private int totalCount; // 总记录条数 6