背景
工具类是我们开发中,常常用到的一个公共类。一想到工具类,因为可以直接类.方法调用,大家就会想到静态的声明这个方法。不用实例化,直接使用。
那我为何会有标题所提这样一个疑问呢?
静态的声明会在程序一加载的时候就分配一个空间在,类似于一打开程序就实例化了。它会一直存在,直到程序被销毁。若是static使用不当,就很有可能出现内存泄漏的问题。
解决
经过我查阅网上的资料结合自己的理解,我总结出:其实单例模式的方式和静态的方式是可以共存的。
单例模式工具类应用场景1:
这一种场景就比较容易想到,比如,这个工具类中的成员变量需要有且只有同一个的时候。比如DialogUtils、DateUtils……
单例模式工具类应用场景2:
应用于一些方法中会改变传过来的对象的值。我们叫做引用了外部对象。比如我传一个List对象给你,你可以get它里面的item,但是你却要往List对象里面set入一些值;我传一个View给你,你可以get这个View的某些属性值,但你却往View里面set东西。
总之,就是我传给你的参数对象我后面还要用的,而在经过你这个方法过后我这个对象会被你改变值的,就用单例模式工具类,写法如下:
/**
* @author xaeHu
* 单例模式工具类:含有外部引用对象的公共方法写到这里
*/
public class ActivityUtils {
private static ActivityUtils utils;
public static ActivityUtils getInstance(){
if(null == utils){
synchronized (ActivityUtils.class){
if(null == utils){
utils = new ActivityUtils();
}
}
}
return utils;
}
/**
* 适配器绑定纵向列表控件
* @param adapter 适配器
* @param recyclerView 列表控件
*/
public void bindToRecyclerView(BaseQuickAdapter adapter, RecyclerView recyclerView){
recyclerView.setLayoutManager(new LinearLayoutManager(App.getContext()));
adapter.bindToRecyclerView(recyclerView);
}
}
使用:
ActivityUtils.getInstance().bindToRecyclerView(adapter,recyclerView);
Emmm……这个App.getContext()是我声明的一个静态的全局可用的ApplicationContext,这个跟本篇文章无关,不过也可以列出来学习交流一下:
//别忘了在AndroidManifest.xml中修改Application的name属性为此类
public class App extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext(){
return context;
}
}
而静态工具类应用场景:
这个就简单啦,过去的数据只是给你用的,你爱怎么处理怎么处理的时候。比如,上面说提,传一个list给你你只是get它的item的值;或者是直接传数据类型的时候。
/**
* @author xaeHu
* 静态模式工具类:不含外部引用对象的公共方法写到这里
*/
public class StaticUtils {
/**
* 打印日志
* @param msg 日志内容
*/
public static void log(String msg){
if(BuildConfig.DEBUG){
Log.i("myout", "---myout---------------------------------------------------");
Log.i("myout", "|\t\t"+msg);
Log.i("myout", "-----------------------------------------------------------");
}
}
/**
* 秒转换分钟
* @param s 秒
* @return 分钟字符串
*/
public static String sToMin(int s){
return msToMin(s*1000);
}
/**
* 格式化方式让long毫秒转分钟字符串
* @return xx:xx
*/
public static String msToMin(long times){
Date dates = new Date(times);
SimpleDateFormat sdf = new SimpleDateFormat("mm:ss", Locale.getDefault());
return sdf.format(dates);
}
/**
* 复制到剪贴板
* @param text
*/
public static void copyText(String text){
ClipboardManager clipboardManager = (ClipboardManager) App.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
//创建ClipData对象
ClipData clipData = ClipData.newPlainText("MyClip", text);
//添加ClipData对象到剪切板中
clipboardManager.setPrimaryClip(clipData);
}
}
完。
转载请注明出处:https://blog.csdn.net/qq_35584878/article/details/91438648