Android代码优化----Application节点的模板写法及UI工具类

简介:

一、 MyApplication类的编写:

新建一个类MyApplication,继承自Application。代码如下:

MyApplication.java:

复制代码
 1 package com.smyhvae.homepicdemo;
 2 
 3 import android.app.Application;
 4 import android.os.Handler;
 5 import android.os.Looper;
 6 
 7 /**
 8  * Created by smyhvae on 2015/5/13.
 9  */
10 public class MyApplication extends Application {
11     //获取到主线程的上下文
12     private static MyApplication mContext = null;
13     //获取到主线程的handler
14     private static Handler mMainThreadHandler = null;
15     //获取到主线程的looper
16     private static Looper mMainThreadLooper = null;
17     //获取到主线程
18     private static Thread mMainThead = null;
19     //获取到主线程的id
20     private static int mMainTheadId;
21 
22     @Override
23     public void onCreate() {
24         // TODO Auto-generated method stub
25         super.onCreate();
26         this.mContext = this;
27         this.mMainThreadHandler = new Handler();
28         this.mMainThreadLooper = getMainLooper();
29         this.mMainThead = Thread.currentThread();
30         //android.os.Process.myUid()   获取到用户id
31         //android.os.Process.myPid()获取到进程id
32         //android.os.Process.myTid()获取到调用线程的id
33         this.mMainTheadId = android.os.Process.myTid();
34     }
35 
36     public static MyApplication getApplication() {
37         return mContext;
38     }
39 
40     public static Handler getMainThreadHandler() {
41         return mMainThreadHandler;
42     }
43 
44     public static Looper getMainThreadLooper() {
45         return mMainThreadLooper;
46     }
47 
48     public static Thread getMainThread() {
49         return mMainThead;
50     }
51 
52     public static int getMainThreadId() {
53         return mMainTheadId;
54     }
55 
56 }
复制代码

上面的所有代码每次在开发一个新的app时都需要用到的,然后具体到不同的项目,再继续添加不同的东西。

然后记得在清单文件中进行声明:

1     <application
2         android:allowBackup="true"
3         android:icon="@mipmap/ic_launcher"
4         android:label="@string/app_name"
5         android:theme="@style/AppTheme" 
6         android:name=".MyApplication">

需要声明的是上方代码的第6行android:name的属性。

 

二、UI工具类的编写:

这个工具类也是在app开发中经常用到的。可以直接copy。代码如下:

UIUtils.java:

复制代码
  1 package com.smyhvae.homepicdemo.utils;
  2 
  3 import android.content.Context;
  4 import android.content.Intent;
  5 import android.content.res.ColorStateList;
  6 import android.content.res.Resources;
  7 import android.graphics.drawable.Drawable;
  8 import android.os.Handler;
  9 import android.view.LayoutInflater;
 10 import android.view.View;
 11 
 12 import com.smyhvae.homepicdemo.MyApplication;
 13 
 14 /**
 15  * Created by smyhvae on 2015/5/13.
 16  */
 17 
 18 public class UIUtils {
 19 
 20     
 21     public static Context getContext() {
 22         return MyApplication.getApplication();
 23     }
 24 
 25     public static Thread getMainThread() {
 26         return MyApplication.getMainThread();
 27     }
 28 
 29     public static long getMainThreadId() {
 30         return MyApplication.getMainThreadId();
 31     }
 32 
 33     /** dip转换px */
 34     public static int dip2px(int dip) {
 35         final float scale = getContext().getResources().getDisplayMetrics().density;
 36         return (int) (dip * scale + 0.5f);
 37     }
 38 
 39     /** pxz转换dip */
 40     public static int px2dip(int px) {
 41         final float scale = getContext().getResources().getDisplayMetrics().density;
 42         return (int) (px / scale + 0.5f);
 43     }
 44 
 45     /** 获取主线程的handler */
 46     public static Handler getHandler() {
 47         return MyApplication.getMainThreadHandler();
 48     }
 49 
 50     /** 延时在主线程执行runnable */
 51     public static boolean postDelayed(Runnable runnable, long delayMillis) {
 52         return getHandler().postDelayed(runnable, delayMillis);
 53     }
 54 
 55     /** 在主线程执行runnable */
 56     public static boolean post(Runnable runnable) {
 57         return getHandler().post(runnable);
 58     }
 59 
 60     /** 从主线程looper里面移除runnable */
 61     public static void removeCallbacks(Runnable runnable) {
 62         getHandler().removeCallbacks(runnable);
 63     }
 64 
 65     public static View inflate(int resId){
 66         return LayoutInflater.from(getContext()).inflate(resId,null);
 67     }
 68 
 69     /** 获取资源 */
 70     public static Resources getResources() {
 71         
 72         return getContext().getResources();
 73     }
 74 
 75     /** 获取文字 */
 76     public static String getString(int resId) {
 77         return getResources().getString(resId);
 78     }
 79 
 80     /** 获取文字数组 */
 81     public static String[] getStringArray(int resId) {
 82         return getResources().getStringArray(resId);
 83     }
 84 
 85     /** 获取dimen */
 86     public static int getDimens(int resId) {
 87         return getResources().getDimensionPixelSize(resId);
 88     }
 89 
 90     /** 获取drawable */
 91     public static Drawable getDrawable(int resId) {
 92         return getResources().getDrawable(resId);
 93     }
 94 
 95     /** 获取颜色 */
 96     public static int getColor(int resId) {
 97         return getResources().getColor(resId);
 98     }
 99 
100     /** 获取颜色选择器 */
101     public static ColorStateList getColorStateList(int resId) {
102         return getResources().getColorStateList(resId);
103     }
104     //判断当前的线程是不是在主线程 
105     public static boolean isRunInMainThread() {
106         return android.os.Process.myTid() == getMainThreadId();
107     }
108     
109     public static void runInMainThread(Runnable runnable) {
110         if (isRunInMainThread()) {
111             runnable.run();
112         } else {
113             post(runnable);
114         }
115     }
116 
117     public static void startActivity(Intent intent){
118 //        BaseActivity activity = BaseActivity.getForegroundActivity();
119 //        if(activity != null){
120 //            activity.startActivity(intent);
121 //        }else{
122 //            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
123 //            getContext().startActivity(intent);
124 //        }
125     }
126 
127     /** 对toast的简易封装。线程安全,可以在非UI线程调用。 */
128     public static void showToastSafe(final int resId) {
129         showToastSafe(getString(resId));
130     }
131 
132     /** 对toast的简易封装。线程安全,可以在非UI线程调用。 */
133     public static void showToastSafe(final String str) {
134         if (isRunInMainThread()) {
135             showToast(str);
136         } else {
137             post(new Runnable() {
138                 @Override
139                 public void run() {
140                     showToast(str);
141                 }
142             });
143         }
144     }
145 
146     private static void showToast(String str) {
147 //        BaseActivity frontActivity = BaseActivity.getForegroundActivity();
148 //        if (frontActivity != null) {
149 //            Toast.makeText(frontActivity, str, Toast.LENGTH_LONG).show();
150 //        }
151     }
152 }
复制代码

 

相关文章
|
16天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
4月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
293 1
|
3月前
|
JavaScript
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
这篇文章介绍了如何使用Ant Design Vue UI框架创建一个简单的后台管理模板,包括创建Vue项目、安装和使用ant-design-vue、以及编写后台管理通用页面的代码和样式。
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
|
3月前
|
JavaScript 前端开发 开发工具
使用vue3+element-ui plus 快速构建后台管理模板
本文介绍了如何使用Vue 3和Element UI Plus快速构建后台管理模板的步骤,包括安装Vue 3脚手架、Element UI Plus以及如何全局配置Element UI Plus。然后详细讲解了如何使用Element UI Plus构建布局,包括Header组件、Aside组件和HomeView视图的创建和样式调整,以及App.vue和main.css的修改,最后提供了项目的文件结构图和效果展示。
使用vue3+element-ui plus 快速构建后台管理模板
|
3月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
随着移动应用市场的蓬勃发展,用户对界面设计的要求日益提高。为此,掌握由Google推出的Material Design设计语言成为提升应用颜值和用户体验的关键。本文将带你深入了解Material Design的核心原则,如真实感、统一性和创新性,并通过丰富的组件库及示例代码,助你轻松打造美观且一致的应用界面。无论是色彩搭配还是动画效果,Material Design都能为你的Android应用增添无限魅力。
72 1
|
3月前
|
C# Android开发 开发者
Uno Platform 高级定制秘籍:深度解析与实践样式和模板应用,助你打造统一且高效的跨平台UI设计
【9月更文挑战第7天】Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 创建跨平台 UI 应用,覆盖 Windows、iOS、Android、macOS 和 WebAssembly。本文介绍 Uno Platform 中样式和模板的应用,助力开发者提升界面一致性与开发效率。样式定义控件外观,如颜色和字体;模板则详细定制控件布局。通过 XAML 定义样式和模板,并可在资源字典中全局应用或嵌套扩展。合理利用样式和模板能简化代码、保持设计一致性和提高维护性,帮助开发者构建美观高效的跨平台应用。
66 1
|
4月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
4月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
61 1
|
4月前
|
API Android开发
Android项目架构设计问题之选择和使用合适的UI库如何解决
Android项目架构设计问题之选择和使用合适的UI库如何解决
52 0
|
5月前
|
小程序
通用的职位招聘小程序ui模板
通用的职位招聘小程序ui模板
46 5
通用的职位招聘小程序ui模板