Android代码优化----Application节点的模板写法及UI工具类
一、 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工具类的更多相关文章
- Android快捷便利但不常被使用的原生工具类
Android快捷便利但不常被使用的原生工具类 Android SDK原生 API中,有一些常用的工具类,运用得当可以省事省力省时,何况还是Android官方提供的,现在收集整理一些出来.DateUt ...
- 我的Android进阶之旅------>Android关于dp(dip)、sp转px的工具类
下面是一个工具类,提供了dp.sp.px之间相互转化的方法. import android.content.Context; /** * dp.sp 转换为 px 的工具类<br> * & ...
- 从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现
相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人 ...
- Android之2D图形(圆、直线、点)工具类 (持续更新)
public class Circle { private PointF centerPoint; private float radius; public PointF getCenterPoint ...
- Android 开发工具类 35_PatchUtils
增量更新工具类[https://github.com/cundong/SmartAppUpdates] import java.io.File; import android.app.Activity ...
- 转--Android中调用webservice的工具类
最近学习WebService,感觉利用这个借口开发网站的Android客户端方便及了,用到一个工具类,这里铭记一下. public static final String WebServiceName ...
- Android工具类整合
Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...
- android 文件读写工具类
将可以序列化的对象通过base64编码后进行保存 但是感觉多数情况下,不需要采用这个功能,直接保存原始的json字符串,取出来之后再进行解析即可 package com.wotlab.home.mon ...
- Android代码优化----PullToRefresh+universal-image-loader实现从网络获取数据并刷新
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- 使用R的networkD3包画可交互的网络图
d3network包code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs & ...
- Hibernate框架的总结
hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...
- 初识HTTP协议
本篇文章从概念上初识HTTP协议,参考链接:http://www.runoob.com/http/http-tutorial.html 目录: 一.HTTP协议 HTTP 工作原理 HTT ...
- javascript数组浅谈3
前两节说了数组最基本的创建,队列方法,排序和一些操作方法,这节说说迭代和归并方法. every()方法 & some()方法 这两个方法会对数组中的每一项运行给定函数,然后返回一个布尔值,理解 ...
- [Java] JDK 系统环境变量设置 bat
@echo off set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environmen ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q131-Q132)
Question 131You create a SharePoint site by using the Document Center site template.You need to ensu ...
- Android Studio 项目代码全部消失--出现原因及解决方法
出现原因,自己把项目地址父层目录文件名修改了,导致原来打开的项目位置不对,代码全部消失.这样就只要关闭项目,打开一下你修改路径下的项目即可.因为原来的项目还在原来的路径下寻找,但是原来的路径发生了改变
- iOS 获取系统音量
//设置一个全局变量 UISilder * volumeViewSlider; #pragma mark - 获取系统音量 - (void)configureVolume { volumeView = ...
- C安全编码--数组
建议和规则 建议: 理解数组的工作方式 获取数组的长度时不要对指针应用sizeof操作符 显示地指定数组的边界,即使它已经由初始化值列表隐式地指定 规则: 保证数组索引位于合法的范围内 在所有源文件中 ...
- 20个简化开发任务的 JavaScript库
所谓JavaScript库就是预先写好的可以简化基于JavaScript的应用程序开发的,尤其是Ajax和其它以web为中心的技术的 JavaScript代码集.JavaScript主要用于写内嵌于H ...