commlib使用指南

  1. 1.概况
  2. 2.索引
    1. 2.1 CommCountDownTimer
    2. 2.2 CommThreadPool
    3. 2.3 SharedSetting
      1. 2.3.1
      2. 2.3.2
      3. 2.3.3
    4. 2.4 CommMultiThreadAsyncTask
    5. 2.5 CommWeakHandler

一般来说重新开发一个项目都会有很多重复劳动,一些底层非业务的东西也总是大同小异,这几年看到的项目一般都是有个comm之类的lib,特点就是业务无关,通用性强,使用方便等等。网上也不乏有很多快速开发的框架,但是建议还是把日常积累的东西整理成一个自己的专属lib,不仅可以达到学习的目的,而且扩展性和熟悉程度都是不言而喻的,这个项目希望能够持续扩展,本篇文章也权当一个索引和使用指南了。

1.概况

本项目属于开源项目,git地址:https://github.com/same4869/XwangCommLib
然后这个项目已经上传上jcenter上面,所以任何项目想要使用里面的内容只需要在gradle里面添加compile 'com.xwang:commlib:1.0.0'就行了,最后一个是版本号,最新的版本号请查看最新的git log。
此外如果自己想把自己封装的lib上传到jcenter请查看 https://gold.xitu.io/entry/58992a452f301e00697a17b9 这篇博文。

2.索引

2.1 CommCountDownTimer

和5.0以上的CountDownTimer源码完全一致,大概对比了一下,应该是解决低版本倒计时cancel可能出现的问题。
倒计时控件,使用方式大概如下

 new CommCountDownTimer(30000, 1000) {

      public void onTick(long millisUntilFinished) {
          mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
      }

      public void onFinish() {
          mTextField.setText("done!");
      }
   }.start();

2.2 CommThreadPool

里面包含一个基于newCachedThreadPool的线程池,还包含一个HandlerThread和一个主线程的Handler
暴露了3个方法出来
poolExecute(Runnable runnable),使用线程池,一般耗时方法采用这个方法使用线程池管理。
serialExecute(Runnable runnable),使用HandlerThread创建的固定线程。
runOnUiThread(Runnable runnable),主线程中运行。
使用大概如下

     WenbaThreadPool.poolExecute(new Runnable() {

            @Override
            public void run() {
              ...
            }
        });

2.3 SharedSetting

这个组件主要解决多应用间存储共享的问题,使用ContentProvider来实现,封装后可以像使用SP一样存储和读取多应用间的共享数据。
使用方式如下

2.3.1

多应用中必须有且仅有一个应用(一般是主应用,其他应用使用的时候保证这个应用必须已经安装)在AndroidManifest.xml中声明

      <provider
            android:name="commlib.xun.com.commlib.sharedsetting.CommSharedSettingContentProvider"
            android:authorities="commlib.xun.com.commlib.sharedsetting.CommSharedSettingContentProvider"
            android:exported="true"/>
2.3.2

在需要使用此功能的APP中建立SharedSetting类,里面跟封装的SP规则差不多

public class SharedSetting {
    private static final String TEST_OH = "test_oh";

    public static void setSavedPenAddress(String address) {
        CommSharedSettingOperator.save(SameMvpApplicationContext.application, TEST_OH, address, null);
    }

    public static String getSavedPenAddress() {
        return CommSharedSettingOperator.queryValue(SameMvpApplicationContext.application, TEST_OH);
    }
}
2.3.3

存储使用如下

SharedSetting.setSavedPenAddress("我来自SameMvpDemo");

读取使用如下

SharedSetting.getSavedPenAddress()

2.4 CommMultiThreadAsyncTask

继承自AsyncTask,用法也一致,其中暴露了executeMultiThread方法,会在API 11以上使用之前CommThreadPool里面所创建的线程池,然后也暴露出了poolExecute方法,和CommThreadPool的方法一致。
使用如下

 new CommMultiThreadAsyncTask<Void, Void, HomeWork>() {

            protected void onPreExecute() {
            }

            @Override
            protected HomeWork doInBackground(Void... params) {

            }

            @Override
            protected void onPostExecute(HomeWork result) {

            }

        }.executeMultiThread();

当然也可以继承CommMultiThreadAsyncTask来进行进一步的封装。

2.5 CommWeakHandler

CommWeakHandler主要是用来解决日常中使用handler带来的内存泄露问题,用法跟普通的handler一样用就行了,主要要声明成全局和activity一个生命周期

private WeakHandler mHandler = new WeakHandler();

了解原理请移步
git地址https://github.com/badoo/android-weak-handler
在谷歌上搜索WeakHandler会用不少分析文章。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至same4869@126.com

×

喜欢就点赞,疼爱就打赏