在 Android 开发中,我们经常需要用到各种工具类,比如 SPUills,ListUtils,TimeUtils,StringUtils,ToastUtisl ,FragmentUtils 等等。今天,这篇博客主要介绍我平时在开发中常用到的工具类,希望能给大家带来一点点帮助,后续会不断更新,欢迎大家加入一起维护。
完全退出
写在基类 BaseActivity,然后每个Activity都去继承
public class BaseActivity extends AppCompatActivity {
public ActivityManagerUtil activityManagerUtil;
public Activity mActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId() );
mActivity = this;
activityManagerUtil = ActivityManagerUtil.getInstance();
activityManagerUtil.pushOneActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//结束Activity&从栈中移除该Activity
activityManagerUtil.popOneActivity(this);
}
protected abstract int getLayoutId();
}
需要完全退出
activityManagerUtil.appExit();
全局异常捕获
只要在Application 初始化即可
public class AndroidUtilsApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//崩溃处理
CrashHandlerUtil crashHandlerUtil = CrashHandlerUtil.getInstance();
crashHandlerUtil.init(this);
crashHandlerUtil.setCrashTip(“很抱歉,程序出现异常,即将退出!”);
}
}
FragmentUtils
-
addFragment
-
hideAddFragment
-
removeFragment
-
replaceFragment
-
popFragment
-
showFragment
-
dispatchBackPress
让 Fragment 处理 Back 事件,“高内聚,低耦合”,一直是我们追求的目标,而这完美地体现了这一点
Utils
- void init(@NonNull final Application app)
在 Application 初始化的时候调用
- Application getApp()
获取 Application 对象
该工具类的主要作用是为我们提供一个 Application 对象,而 Application 是 Context 的实现类。这样,我们在写很多工具类的时候,就不需要传入 Context 对象了。比如 ToastUtils,SPUtils 等,方便用快捷
SPUtils
-
get
-
put
-
getLong
-
getInt
-
getString
-
getFloat
-
getShort
-
putInt
-
putString
在该工具里面,它依赖于 Utils getApp() 方法,因此,我们在调用相应方法的时候不需要每次都传入 Context 。方便又快捷
ToastUtils
-
showLongSafe
-
showShortSafe
-
showShort
-
showLong
showLongSafe 方法与 showLong 方法的区别在于 showLongSafe 是安全地,它可以直接在子线程中调用
IntentUtils
- Intent openFile(String filePath)
用来产生打开各种类型文件的 Intent,包括 图片,音频文件,视频文件,APK,ppt,xls,doc,chm,txt 等文件
DensityUtil
-
dip2px
-
px2dip
-
px2sp
-
sp2px
主要用来处理 dp 与 px 的互转,sp 与 px 的互转等。
AppUtil
- String getAppVersionName(Context context)
获取app版本名
- int getAppVersionCode(Context context)
获取app版本号
获取网络状态
NetStateUtils
- boolean is3G(Context context)
判断是否是 3G 网络
- isWifi(Context context)
判断是否是 wifi 网络
- is2G(Context context)
判断是否是 2G 网络
- boolean isWifiEnabled(Context context)
判断 WiFi 是否打开
- isNetworkConnected(Context context)
判断是否有网络连接
- boolean isMobileConnected(Context context)
判断当前是否是移动网络,并且网络是否可用
- getAPNType(Context context)
获取当前的网络状态:(该方法是自定义的) :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2
- String getHostIp()
获取本地的 IP 地址
- boolean isGPSEnabled(Context context)
判断 GPS 是否开启
更多方法,请参考该类,这里不一一说明了。
监听网络变化
监听网络变化的,主要有三个广播
需要注意的 android.NET.conn.CONNECTIVITY_CHANGE 这个广播,从 Android 7.0 开始,如果是静态注册的,将无法收到广播。
更多行为变更请查看官网地址
KeyBoardUtil
- KeyBoardUtil getInstance(Activity activity)
获取实例对象
- show()
显示输入法
- hide()
隐藏输入法
StringUtils
- isEmpty(CharSequence str)
判断是否是空字符串
- String getStr(String str,String defStr)
获取字符串的值,如果是 null,返回 defStr。当然你也可以调用 getStr(String str) 方法,为 null 的话,返回 “”。
好处:如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。
- length(CharSequence str)
获取字符串的长度。平时我们如果调用 String.length ,如果字符串为空,则会包空指针异常。调用该方法,我们可以不必每次判断字符串是否为空。
- String capitalizeFirstLetter(String str)
该方法是将字符串的首字母变为大小写
/**
-
capitalize first letter
-
capitalizeFirstLetter(null) = null;
-
capitalizeFirstLetter(“”) = “”;
-
capitalizeFirstLetter(“2ab”) = “2ab”
-
capitalizeFirstLetter(“a”) = “A”
-
capitalizeFirstLetter(“ab”) = “Ab”
-
capitalizeFirstLetter(“Abc”) = “Abc”
-
@param str
-
@return
*/
ListUtils
在 Android 开发中,对 List 的操作也是非常常见的。
- getSize(List sourceList)
获取 List 的数量。该方法相比传统的方法,不需要每一次都去判空。
if(sourceList==null){
return 0;
}else{
sourceList.size();
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
![](https://i-blog.csdnimg.cn/blog_migrate/722caca5991b1dfbe6fd31250a907e59.jpeg)
题外话
我们见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。
其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!
注意:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
ps://img2.imgtp.com/2024/03/13/H4lCoPEF.jpg" />
题外话
我们见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。
其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!
注意:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-aYLkqI37-1712352860725)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!