一、 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. PPP模式下的融资结构优化

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

  2. 数据库的有关知识==>>我们的血泪史之经典练习(1-2)

    今天给大家说说数据库的有关知识 抒情一下,想在好困,真的,虽然我在这温暖的教室,身边有知心的盆友, ,很高兴还能是学生的一员,我们还年轻,我们也不会想的太多,高高兴兴上学,快快乐乐回家,每天吃的饱饱, ...

  3. ahjesus ubuntu10.4安装ruby2.1.1

    sudo apt-get install python-software-properties sudo apt-add-repository ppa:brightbox/ruby-ng sudo a ...

  4. 【GPU编解码】GPU硬解码---DXVA

    前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解 ...

  5. linux多线程-互斥&条件变量与同步

    多线程代码问题描述 我们都知道,进程是操作系统对运行程序资源分配的基本单位,而线程是程序逻辑,调用的基本单位.在多线程的程序中,多个线程共享临界区资源,那么就会有问题: 比如 #include < ...

  6. 「C语言」文件的概念与简单数据流的读写函数

    写完「C语言」单链表/双向链表的建立/遍历/插入/删除 后,如何将内存中的链表信息及时的保存到文件中,又能够及时的从文件中读取出来进行处理,便需要用到”文件“的相关知识点进行文件的输入.输出. 其实, ...

  7. 西邮Linux兴趣小组2016免试题

    4.28的宣讲会圆满结束(就在写这段话之前不久),对于西邮Linux兴趣小组这一次纳新,身为局外人表示:还是有历史,还是会玩,还是厉害哈. 华丽的分割线里面是自己之前的攻关战略,最后补充了宣讲会上学长 ...

  8. NPOI导出数据到Excel

    NPOI导出数据到Excel   前言 Asp.net操作Excel已经是老生长谈的事情了,可下面我说的这个NPOI操作Excel,应该是最好的方案了,没有之一,使用NPOI能够帮助开发者在没有安装微 ...

  9. HDFS简单入门

    本文地址:http://www.cnblogs.com/archimedes/p/hadoop-simple.html,转载请注明源地址. 欢迎关注我的个人博客:www.wuyudong.com, 更 ...

  10. Emacs常用命令汇总

    注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shift,在键盘上通常是Shift键,也就是 C Control ...