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 ...
随机推荐
- Angularjs,WebAPI 搭建一个简易权限管理系统 —— 基本功能演示(二)
目录 前言 Angularjs名词与概念 Angularjs 基本功能演示 系统业务与实现 WebAPI项目主体结构 Angularjs 前端主体结构 基本功能演示(二) 非常抱歉这个月实在太忙,一直 ...
- 自定义View_1_关于View,ViewGroup的测量和绘制流程
自定义View(1) ------ 关于View,ViewGroup的测量和绘制流程 在Android当中,自定义控件属于比较高级的知识体系,今天我们就一起研究研究关于自定义View的那点事,看看它到 ...
- Java 上传文件到 SFTP 抛异常 java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC 的解决办法
最近从 Op 那里报来一个问题,说是SFTP上传文件不成功.拿到的 Exception 如下: Caused by: java.lang.NoClassDefFoundError: Could not ...
- java微信开发
所谓的微信开发就是在微信开发模式之下,对微信进行公众号和企业号的扩展开发. 如果要让你的微信公众号有更多的功能,比如菜单支持,自动的信息服务,查询,消息推送等,就必须开启微信的开发模式.进入微 ...
- Visual Studio添加dll程序集引用操作步骤
Visual Studio 中添加引用的操作: 在“解决方案资源管理器”中,先右击项目图标,在弹出菜单选择“添加引用...” 然后在弹出的窗口中选择所要添加的选项,点击确定就可以了. 原文:http: ...
- angularjs作用域
作用域(scope)①是构成AngularJS应用的核心基础,在整个框架中都被广泛使用,因此了解它如何工作是非常重要的.应用的作用域是和应用的数据模型相关联的,同时作用域也是表达式执行的上下文.$sc ...
- js验证真实姓名与身份证号,手机号
最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 1.js验证真实姓名 ...
- ASP.NET控件绑定数据源
DataList/GridView/Repeater DataSet表示数据集,其中包含表,约束和表之间的关系.与现有数据源的交互通过DataAdapter来控制. 源代码示例: SqlDataAda ...
- R语言学习笔记:小试R环境
买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...
- 我在用的mac软件(2)-终端环境之zsh和z(*nix都适用)
继续上篇介绍我的终端环境.这篇介绍zsh和z,其实这不局限于os x,在所有的*nix系统中都是可用的. zsh zsh作为bash的替代品,自然很多人要问:why zsh? 在Zsh Worksho ...