单例模式之传递Context参数
16lz
2021-01-25
单利模式的懒汉模式,在android的源码中应用的还是相当普遍的。在android的开发中,有时候需要一个Context的变量,同时还需要使用单例模式,那么该怎么处理呢?
- 在getInstance的时候,进行传递context变量。这样的方式,在android源码中还是很普遍的。
/** * 单例模式的懒汉模式 * 传递了一个上下文参数 context ,如此就能够实现新建一个线程,能有ui的操作 * 参考:http://blog.csdn.net/l2show/article/details/46672061 和 android 源码 */public class DownloadInfo { private static final String TAG = "DownloadInfo"; private Context mContext; private static DownloadInfo mDownloadInfo; private Handler mToastHandler; private static final int DOWNLOADNOTHING = 0; private DownloadInfo(Context context) { this.mContext = context; //执行一些初始化的任务 new Thread(){ public void run(){ Looper.prepare(); mToastHandler = new Handler(Looper.myLooper()){ @Override public void handleMessage(Message msg) { switch (msg.what){ case DOWNLOADNOTHING: Toast.makeText(mContext,"DOWNLOADNOTHING",Toast.LENGTH_SHORT).show(); } } }; Looper.loop(); } }.start(); } public static DownloadInfo getInstance(Context context){ if(mDownloadInfo ==null){ mDownloadInfo = new DownloadInfo(context); } return mDownloadInfo; } //建立一些方法 public void showNothingToast(){ if(mToastHandler != null){ mToastHandler.sendEmptyMessage(DOWNLOADNOTHING); } }}
public class MainActivity extends AppCompatActivity { private DownloadInfo downloadInfo; private Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; downloadInfo = DownloadInfo.getInstance(context); downloadInfo.showNothingToast(); }}
以上代码能实现在一个单例的线程中更新ui界面的功能。
更多相关文章
- No.11 使用firewall配置的防火墙策略的生效模式
- Android(安卓)MVP 模式 项目初体验(一)
- Android之Handler、Looper、MessageQueue源码分析.md
- Android(安卓)Toolchain环境搭建
- Android(安卓)任务栈简介
- Android中的代理模式
- Android基础教程(九)之自定义下拉菜单模式----Spinner与setDropD
- Android(安卓)实现锁屏的较完美方案
- Android(安卓)事件处理(—)(附源码)