• Stars
    star
    191
  • Rank 202,877 (Top 4 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

组件化开发中基础公共库,activity栈管理;fragment周期监听;Lru缓存库;反射库;分区存储;Log日志打印和存储;通用缓存库(支持sp,mmkv,lru,disk,fastsp等多种存储方式切换);App重启;通用全面的工具类Utils;通用基类fragment,adpater,activity等简单封装;intent内容打印到控制台库;通用基础接口

框架公共组件层

目录介绍

  • 01.框架公共组件层
  • 02.组件化建设
  • 03.公共组件库依赖
  • 04.Activity栈管理库
  • 05.通用存储库
  • 06.Log日志打印库
  • 07.App重新启动库
  • 08.通用工具类库
  • 09.通用基类封装库
  • 10.反射工具类库
  • 11.Intent封装库
  • 12.基础接口库
  • 13.异常上报接口库
  • 14.File流读写库
  • 15.加密和解密库
  • 16.Lru内存缓存库
  • 17.Lru磁盘缓存库
  • 18.来电和去电监听
  • 19.置灰方案实践库
  • 20.状态监听实践库

01.框架公共组件层

  • 组件化开发中基础公共库,activity栈管理;Log日志;通用缓存库(支持sp,mmkv,lru,disk,fastsp等多种存储方式切换);App重启;通用全面的工具类Utils;通用基类fragment,adpater,activity等简单封装;intent内容打印到控制台库

02.组件化建设

  • 按照不同层级架构图如下所示
    • image

03.公共组件库依赖

  • 关于依赖库如下所示,可以根据需求选择性使用:
    //base基类
    implementation 'com.github.yangchong211.YCCommonLib:BaseClassLib:1.4.8'
    implementation 'com.github.yangchong211.YCCommonLib:ComponentLib:1.4.8'
    //工具类utils
    implementation 'com.github.yangchong211.YCCommonLib:ToolUtilsLib:1.4.8'
    //activity栈管理
    implementation 'com.github.yangchong211.YCCommonLib:ActivityManager:1.4.8'
    //通用缓存存储库,支持sp,fastsp,mmkv,lruCache,DiskLruCache等
    implementation 'com.github.yangchong211.YCCommonLib:AppBaseStore:1.4.8'
    //通用日志输出库
    implementation 'com.github.yangchong211.YCCommonLib:AppLogLib:1.4.8'
    //app重启库
    implementation 'com.github.yangchong211.YCCommonLib:AppRestartLib:1.4.8'
    //intent内容输出到控制台
    implementation 'com.github.yangchong211.YCCommonLib:SafeIntentLib:1.4.8'
    //通用组件接口库
    implementation 'com.github.yangchong211.YCCommonLib:AppCommonInter:1.4.8'
    //各种广播监听哭
    implementation 'com.github.yangchong211.YCCommonLib:AppStatusLib:1.4.8'
    //基建库
    implementation 'com.github.yangchong211.YCCommonLib:ArchitectureLib:1.4.8'
    //同上上报库
    implementation 'com.github.yangchong211.YCCommonLib:EventUploadLib:1.4.8'
    //权限库
    implementation 'com.github.yangchong211.YCCommonLib:AppPermission:1.4.8'
    //Lru磁盘缓存库
    implementation 'com.github.yangchong211.YCCommonLib:AppLruDisk:1.4.8'
    //Lru内存缓存库
    implementation 'com.github.yangchong211.YCCommonLib:AppLruCache:1.4.8'
    //fragment生命周期监听库
    implementation 'com.github.yangchong211.YCCommonLib:FragmentManager:1.4.8'
    //反射工具库
    implementation 'com.github.yangchong211.YCCommonLib:ReflectionLib:1.4.8'
    //App启动优化库
    implementation 'com.github.yangchong211.YCCommonLib:ParallelTaskLib:1.4.8'
    //Context上下文库
    implementation 'com.github.yangchong211.YCCommonLib:AppContextLib:1.4.8'
    //加解密库
    implementation 'com.github.yangchong211.YCCommonLib:AppEncryptLib:1.4.8'
    //handler包装库
    implementation 'com.github.yangchong211.YCCommonLib:AppHandlerLib:1.4.8'
    //Application库
    implementation 'com.github.yangchong211.YCCommonLib:ApplicationLib:1.4.8'
    //store磁盘分区库
    implementation 'com.github.yangchong211.YCCommonLib:AppMediaStore:1.4.8'
    //内存
    implementation 'com.github.yangchong211.YCCommonLib:ToolMemoryLib:1.4.8'
    //屏幕截屏库
    implementation 'com.github.yangchong211.YCCommonLib:AppScreenLib:1.4.8'
    //Wi-Fi库
    implementation 'com.github.yangchong211.YCCommonLib:AppWiFiLib:1.4.8'
    //Vp相关适配器库
    implementation 'com.github.yangchong211.YCCommonLib:BaseVpAdapter:1.4.8'
    //io流读写库
    implementation 'com.github.yangchong211.YCCommonLib:FileIoHelper:1.4.8'
    //图片工具库
    implementation 'com.github.yangchong211.YCCommonLib:ImageToolLib:1.4.8'
    //网络判断库
    implementation 'com.github.yangchong211.YCCommonLib:NetWorkLib:1.4.8'
    //手机
    implementation 'com.github.yangchong211.YCCommonLib:PhoneSensor:1.4.8'
    //File文件库
    implementation 'com.github.yangchong211.YCCommonLib:ToolFileLib:1.4.8'
    //Zip压缩库
    implementation 'com.github.yangchong211.YCCommonLib:ZipFileLib:1.4.8'
    //图片压缩
    implementation 'com.github.yangchong211.YCCommonLib:AppCompress:1.4.8'

04.Activity栈管理库

  • 非常好用的activity任务栈管理库,自动化注册。完全解耦合的activity栈管理,拿来即可用,或者栈顶Activity,移除添加,推出某个页面,获取应用注册Activity列表等,可以注册监听某个页面的生命周期,小巧好用。
    //退出应用程序
    ActivityManager.getInstance().appExist();
    //查找指定的Activity
    Activity commonActivity = ActivityManager.getInstance().get(CommonActivity.class);
    //判断界面Activity是否存在
    boolean exist = ActivityManager.getInstance().isExist(CommonActivity.class);
    //移除栈顶的activity
    ActivityManager.getInstance().pop();
    //结束所有Activity
    ActivityManager.getInstance().finishAll();
    //结束指定的Activity
    ActivityManager.getInstance().finish(CommonActivity.this);
    //判断activity任务栈是否为空
    ActivityManager.getInstance().isEmpty();
    //获取栈顶的Activity
    Activity activity = ActivityManager.getInstance().peek();
    //判断activity是否处于栈顶
    ActivityManager.getInstance().isActivityTop(this,"MainActivity");
    //添加 activity 入栈
    ActivityManager.getInstance().add(CommonActivity.this);
    //移除 activity 出栈
    ActivityManager.getInstance().remove(CommonActivity.this);
    //监听某个activity的生命周期,完全解耦合
    ActivityManager.getInstance().registerActivityLifecycleListener(CommonActivity.class, new ActivityLifecycleListener() {
        @Override
        public void onActivityCreated(@Nullable Activity activity, Bundle savedInstanceState) {
            super.onActivityCreated(activity, savedInstanceState);
        }
    
        @Override
        public void onActivityStarted(@Nullable Activity activity) {
            super.onActivityStarted(activity);
        }
    });
    //移除某个activity的生命周期,完全解耦合
    //ActivityManager.getInstance().registerActivityLifecycleListener(CommonActivity.this,listener);

05.通用存储库

  • 通用存储库
    • 支持二级缓存,LRU缓存,磁盘缓存(可以使用sp,mmkv,或者DiskLruCache)。不管你使用那种方式的存储,都是一套通用的api,使用几乎是零成本。
  • 第一步:通用存储库初始化
    CacheConfig.Builder builder = CacheConfig.Companion.newBuilder();
    //设置是否是debug模式
    CacheConfig cacheConfig = builder.debuggable(BuildConfig.DEBUG)
            //设置外部存储根目录
            .extraLogDir(null)
            //设置lru缓存最大值
            .maxCacheSize(100)
            //内部存储根目录
            .logDir(null)
            //创建
            .build();
    CacheInitHelper.INSTANCE.init(MainApplication.getInstance(),cacheConfig);
    //最简单的初始化
    //CacheInitHelper.INSTANCE.init(CacheConfig.Companion.newBuilder().build());
  • 第二步:存储数据和获取数据
    //存储数据
    dataCache.saveBoolean("cacheKey1",true);
    dataCache.saveFloat("cacheKey2",2.0f);
    dataCache.saveInt("cacheKey3",3);
    dataCache.saveLong("cacheKey4",4);
    dataCache.saveString("cacheKey5","doubi5");
    dataCache.saveDouble("cacheKey6",5.20);
    
    //获取数据
    boolean data1 = dataCache.readBoolean("cacheKey1", false);
    float data2 = dataCache.readFloat("cacheKey2", 0);
    int data3 = dataCache.readInt("cacheKey3", 0);
    long data4 = dataCache.readLong("cacheKey4", 0);
    String data5 = dataCache.readString("cacheKey5", "");
    double data6 = dataCache.readDouble("cacheKey5", 0.0);
    
  • 第三步:一些存储说明
    • 关于设置磁盘缓存的路径,需要注意一些问题。建议使用该库默认的路径
    /**
     * log路径,通常这个缓存比较私有的内容
     * 比如sp,mmkv,存储的用户数据
     * 内部存储根目录,举个例子:
     * file:data/user/0/包名/files
     * cache:/data/user/0/包名/cache
     */
    val logDir: String?
    
    /**
     * 额外的log路径,通常缓存一些不私密的内存
     * 比如缓存图片,缓存视频,缓存下载文件,缓存日志等
     *
     * 外部存储根目录,举个例子
     * files:/storage/emulated/0/Android/data/包名/files
     * cache:/storage/emulated/0/Android/data/包名/cache
     */
    val extraLogDir: File?

06.Log日志打印库

  • 通用日志库框架,专用LogCat工具,主要功能全局配置log输出, 个性化设置Tag,可以设置日志打印级别,支持打印复杂对象,可以实现自定义日志接口,支持简化版本将日志写入到文件中。小巧好用!
  • 第一步:初始化操作
    String ycLogPath = AppFileUtils.getCacheFilePath(this, "ycLog");
    AppLogConfig config = new AppLogConfig.Builder()
            //设置日志tag总的标签
            .setLogTag("yc")
            //是否将log日志写到文件
            .isWriteFile(true)
            //是否是debug
            .enableDbgLog(true)
            //设置日志最小级别
            .minLogLevel(Log.VERBOSE)
            //设置输出日志到file文件的路径。前提是将log日志写入到文件设置成true
            .setFilePath(ycLogPath)
            .build();
    //配置
    AppLogFactory.init(config);
  • 第二步:使用Log日志,十分简单,如下所示
    //自己带有tag标签
    AppLogHelper.d("MainActivity: ","debug log");
    //使用全局tag标签
    AppLogHelper.d("MainActivity log info no tag");
    //当然,如果不满足你的要求,开发者可以自己实现日志输出的形式。
    AppLogFactory.addPrinter(new AbsPrinter() {
        @NonNull
        @Override
        public String name() {
            return "yc";
        }
    
        @Override
        public void println(int level, String tag, String message, Throwable tr) {
            //todo 这块全局回调日志,你可以任意实现自定义操作
        }
    });

07.App重新启动库

  • 使用场景说明
    • 使用到了简单工厂模式,通过工厂类,只要提供一个参数传给工厂,就可以直接得到一个想要的产品对象,并且可以按照接口规范来调用产品对象的所有功能(方法)。
    • 比如App切换了debug或者release环境,需要进行app重新启动,可以使用该库,小巧好用。一行代码搞定,傻瓜式使用!
  • 第一种方式,开启一个新的服务KillSelfService,用来重启本APP。
    RestartAppHelper.restartApp(this,RestartFactory.SERVICE);
  • 第二种方式,使用闹钟延时,使用PendingIntent延迟意图,然后重启app
    RestartAppHelper.restartApp(this,RestartFactory.ALARM);
  • 第三种方式,检索获取项目中LauncherActivity,然后设置该activity的flag和component启动app
    RestartAppHelper.restartApp(this,RestartFactory.MAINIFEST);

08.通用工具类库

  • ToolUtils 是一个 Android 工具库。便于开发人员,快捷高效开发需求。
  • 常用的基本上都有,还包括图片压缩,日历事件,异常上报工具,网络,手机方向监听,防爆力点击等工具类。
    FastClickUtils              防爆力点击,可以自定义设置间距时间
    PerfectClickListener        避免在1秒内出发多次点击
    AppFileUtils                file文件工具类
    FileShareUtils              file文件分享工具类
    ScreenShotUtils             监听屏幕被截图事件
    SensorManagerUtils          手机系统方向监听器工具类
    AppNetworkUtils             网络工具类
    AppProcessUtils             进程工具类,高效获取进程名称
    CompressUtils               图片压缩工具类
    ExceptionReporter           异常上报工具类
    OnceInvokeUtils             避免多次执行工具类
    StatusBarUtils              状态栏工具类
    
    //还有很多其他常用工具类,这里就不一一罗列呢
    ……

09.通用基类封装库

  • 通用PagerAdapter封装
    • 方便快速tabLayout+ViewPager。针对页面较少的Fragment选择使用BaseFragmentPagerAdapter,针对页面较多的Fragment选择使用BasePagerStateAdapter。
  • BaseLazyFragment懒加载fragment
    • 就是等到该页面的UI展示给用户时,再加载该页面的数据(从网络、数据库等)。
  • BaseVisibilityFragment
    • fragment是否可见封装类,比如之前需求在页面可见时埋点就需要这个。弥补了setUserVisibleHint遇到的bug……
  • ViewPager2封装库
    • DiffFragmentStateAdapter,可以用作diff操作的适配器;ViewPagerDiffCallback用来做diff计算的工具类

10.反射工具类库

11.Intent封装库

  • 通用打印Intent对象内容到log日志栏中,支持普通intent和延迟PendingIntent。超级方便检查,可以打印action,category,data,flags,extras等等
    //打印intent所有的数据
    IntentLogger.print("intent test : ", intent)
    //打印intent中component
    IntentLogger.printComponentName("intent component : " , intent)
    //打印intent中extras参数
    IntentLogger.printExtras("intent test : ", intent)
    //打印intent中flags参数
    IntentLogger.printFlags("intent test : ", intent)
    
    //PendingIntent
    //打印intent所有的数据
    PendingIntentLogger.print("intent test : ", intent)
    //打印intent中content
    PendingIntentLogger.printContentIntent("intent content : " , intent)
    //打印intent的tag
    PendingIntentLogger.printTag("intent tag : " , intent)

12.基础接口库

  • 背景说明:由于组件化开发中有很多基础组件,由于某些需求,需要统计一些事件,异常上报到平台上,获取控制降级,自定义日志打印等,因此采用接口回调方式实现
  • IEventTrack,event事件接口,一般用于特殊事件上报作用
  • IExceptionTrack,异常事件接口,一般可以用在组件库中catch捕获的时候,上报日志到服务平台操作
  • ILogger,log自定义日志接口,一般用于组件库日志打印,暴露给外部开发者
  • IMonitorToggle,AB测试开关接口,也可以叫降级开关,一般用于组件库某功能降级操作,暴露给开发者设置

13.异常上报接口库

  • 基础库作为一个功能比较独立的lib,总不可能依赖APM组件吧。因此,就采用抽象类隔离!App壳工程继承抽象类,lib库直接调用抽象类。
  • api调用如下所示,直接拿来用即可。下面这些调用可以用在lib库中,特轻量级上报
    //上报日志
    LoggerReporter.report("DiskLruCacheHelper" , "lru disk file path : " + directory.getPath());
    LoggerReporter.report("DiskLruCacheHelper clear cache");
    //上报异常
    ExceptionReporter.report("Unable to get from disk cache", e);
    ExceptionReporter.report(ioe);
    //上报event事件,通常用来埋点
    EventReporter.report("initCacheSuccess")
    EventReporter.report("initCacheSuccess",map)
  • 需要在壳工程代码中,添加具体实现类。代码如下所示:
    //LoggerReporter,ExceptionReporter,EventReporter都是类似的
    public class LoggerReporterImpl extends LoggerReporter {
        @Override
        protected void reportLog(String eventName) {
            
        }
    
        @Override
        protected void reportLog(String eventName, String message) {
    
        }
    }

14.File流读写库

14.1 从文件中读数据

  • 从文件中读数据,使用普通字节流或者字符流方式,如下所示
    //字节流读取file文件,转化成字符串
    String file2String = FileIoUtils.readFile2String1(fileName);
    //字符流读取file文件,转化成字符串
    String file2String = FileIoUtils.readFile2String2(fileName);
  • 从文件中读数据,使用高效流方式,如下所示
    //高效字节流读取file文件,转化成字符串
    String file2String = BufferIoUtils.readFile2String1(fileName);
    //高效字符流读取file文件,转化成字符串
    String file2String = BufferIoUtils.readFile2String2(fileName);

14.2 将内容写入文件

  • 从文件中读数据,使用普通字节流或者字符流方式,如下所示
    //使用字节流,写入字符串内容到文件中
    FileIoUtils.writeString2File1(content,fileName);
    //使用字符流,写入字符串内容到文件中
    FileIoUtils.writeString2File2(content,fileName);
  • 从文件中读数据,使用高效流方式,如下所示
    //高效字节流写入字符串内容到文件中
    BufferIoUtils.writeString2File1(content,fileName);
    //高效字符流写入字符串内容到文件中
    BufferIoUtils.writeString2File2(content,fileName);

14.3 文件复制操作

  • 使用字节流&字符流复制
    //使用字节流复制文件,根据文件路径拷贝文件。
    FileIoUtils.copyFile1(fileName,newFileName);
    //使用字符流复制文件,根据文件路径拷贝文件。
    FileIoUtils.copyFile2(fileName,newFileName);
  • 使用高效流复制
    //使用高效字符缓冲流,根据文件路径拷贝文件。
    BufferIoUtils.copyFile1(fileName,newFileName);
    //使用高效字节缓冲流,根据文件路径拷贝文件
    BufferIoUtils.copyFile2(fileName,newFileName);

14.4 将流对象写入文件

  • 将InputStream流对象写入到本地文件中
    //使用字符流读取流数据到新的file文件中
    FileIoUtils.writeFileFromIS1(is,srcFile);
    //使用字节流将流数据写到文件中
    FileIoUtils.writeFileFromIS1(is,fileName);

15.加密和解密库

  • 关于MD5加密Api如下所示
    //对字符串md5加密
    String md2 = Md5EncryptUtils.encryptMD5ToString(string);
    //对字符串md5加密,加盐处理
    String md3 = Md5EncryptUtils.encryptMD5ToString(string,"doubi");
    //对字节数据md5加密
    String md4 = Md5EncryptUtils.encryptMD5ToString(bytes);
    //对字节数据md5加密,加盐处理
    String md5 = Md5EncryptUtils.encryptMD5ToString(bytes,"doubi".getBytes());
    //对文件进行md5加密
    String md6 = Md5EncryptUtils.encryptMD5File1(txt);
    //对文件进行md5加密
    String md7 = Md5EncryptUtils.encryptMD5File2(new File(txt));
  • 关于base64加密和解密的Api如下所示
    //字符Base64加密
    String strBase64_2 = Base64Utils.encodeToString(str);
    //字符Base64解密
    String strBase64_3 = Base64Utils.decodeToString(strBase64_2);
  • 关于DES加密和解密的Api如下所示
    //DES加密字符串
    String encrypt1 = DesEncryptUtils.encrypt(string,password);
    //DES解密字符串
    String decrypt1 = DesEncryptUtils.decrypt(encrypt1 , password);
    //DES加密文件
    String encryptFile1 = DesEncryptUtils.encryptFile(password, fileName, destFile);
    //DES解密文件
    String decryptFile1 = DesEncryptUtils.decryptFile(password, destFile, destFile3);
    //DES 加密后转为 Base64 编码
    String encrypt2 = DesEncryptUtils.encrypt(string.getBytes(), password.getBytes());
    //DES解密字符串 Base64 解码
    String decrypt2 = DesEncryptUtils.decrypt(encrypt2.getBytes(), password.getBytes());
  • 关于AES加密和解密的Api如下所示
    //AES加密字符串
    String encrypt1 = AesEncryptUtils.encrypt(string,password);
    //AES解密字符串
    String decrypt1 = AesEncryptUtils.decrypt(encrypt1 , password);
  • 关于RC4加密和解密的Api如下所示
    //RC4加密
    String encrypt1 = Rc4EncryptUtils.encryptString(string, secretKey);
    //RC4解密
    String decrypt1 = Rc4EncryptUtils.decryptString(encrypt1, secretKey);
    //RC4加密base64编码数据
    String encrypt2 = Rc4EncryptUtils.encryptToBase64(bytes1, secretKey);
    //RC4解密base64解码数据
    byte[] bytes = Rc4EncryptUtils.decryptFromBase64(encrypt2, secretKey);

16.Lru内存缓存库

17.Lru磁盘缓存库

18.来电和去电监听

  • 业务场景说明
    • 在App进行音视频聊天的时,这个时候来电了,电话接通后,需要关闭音视频聊天。这个时候就需要监听电话来电和去电状态。
  • 监听来电去电能干什么
    • 第一:能够针对那些特殊的电话进行自动挂断,避免打扰到用户。
    • 第二:在业务中,针对来电和去电接通后,需要关闭音视频通话。
  • api调用如下所示,直接拿来用即可
    PhoneManager.getInstance().setOnPhoneListener(new OnPhoneListener() {
        @Override
        public void callIdle() {
            ToastUtils.showRoundRectToast("挂断");
        }
    
        @Override
        public void callOffHook() {
            ToastUtils.showRoundRectToast("接听");
        }
    
        @Override
        public void callRunning() {
            ToastUtils.showRoundRectToast("响铃");
        }
    });
    PhoneManager.getInstance().registerPhoneStateListener(this);

19.置灰方案实践库

  • 当在特殊的某一个日子
    • 我们会表达我们的悼念,缅怀、纪念之情,APP会在某一日设置成黑灰色。比如清明节这天很多App都设置了符合主题的灰色模式。
  • App置灰目标
    • 可以设置全局置灰,也可以设置单独的页面置灰,最好是简单化调用封装的API更好。
  • Api调用如下所示
    AppGrayHelper.getInstance().setType(1).setGray(true).initGrayApp(this,true);
  • 如何实现App全局灰色
    //使用注册ActivityLifecycleCallbacks监听,设置所有activity布局灰色
    AppGrayHelper.getInstance().setGray(true).initGrayApp(this,true)
    //使用hook设置全局灰色
    AppGrayHelper.getInstance().setGray(true).setGray3()
    
  • 如何实现单独页面灰色
    AppGrayHelper.getInstance().setGray1(window)
    AppGrayHelper.getInstance().setGray2(window.decorView)
    
  • 如何实现Dialog和PopupWindow灰色
    AppGrayHelper.getInstance().setGray(true).setGray2(view)
    

20.状态监听实践库

  • api调用如下所示,直接拿来用即可。可以监听wifi,网络,gps,蓝牙,屏幕亮和灭等。完全解耦合。
    AppStatusManager manager = new AppStatusManager.Builder()
            .context(MainApplication.getInstance())
            .file(file)
            .threadSwitchOn(false)
            .builder();
    manager.registerAppStatusListener(new BaseStatusListener() {
        @Override
        public void wifiStatusChange(boolean isWifiOn) {
            super.wifiStatusChange(isWifiOn);
            if (isWifiOn){
                AppLogUtils.i("app status Wifi 打开");
            } else {
                AppLogUtils.i("app status Wifi 关闭");
            }
        }
    
        @Override
        public void gpsStatusChange(boolean isGpsOn) {
            super.gpsStatusChange(isGpsOn);
            if (isGpsOn){
                AppLogUtils.i("app status Gps 打开");
            } else {
                AppLogUtils.i("app status Gps 关闭");
            }
        }
    
        @Override
        public void networkStatusChange(boolean isConnect) {
            super.networkStatusChange(isConnect);
            if (isConnect){
                AppLogUtils.i("app status Network 打开");
            } else {
                AppLogUtils.i("app status Network 关闭");
            }
        }
    
        @Override
        public void screenStatusChange(boolean isScreenOn) {
            super.screenStatusChange(isScreenOn);
            if (isScreenOn){
                AppLogUtils.i("app status Screen 打开");
            } else {
                AppLogUtils.i("app status Screen 关闭");
            }
        }
    
        @Override
        public void screenUserPresent() {
            super.screenUserPresent();
            AppLogUtils.i("app status Screen 使用了");
        }
    
        @Override
        public void bluetoothStatusChange(boolean isBluetoothOn) {
            super.bluetoothStatusChange(isBluetoothOn);
            if (isBluetoothOn){
                AppLogUtils.i("app status 蓝牙 打开");
            } else {
                AppLogUtils.i("app status 蓝牙 关闭");
            }
        }
    
        @Override
        public void batteryStatusChange(AppBatteryInfo batteryInfo) {
            super.batteryStatusChange(batteryInfo);
            AppLogUtils.i("app status 电量 " + batteryInfo.toStringInfo());
        }
    
        @Override
        public void appThreadStatusChange(AppThreadInfo threadInfo) {
            super.appThreadStatusChange(threadInfo);
            AppLogUtils.i("app status 所有线程数量 " + threadInfo.getThreadCount());
            AppLogUtils.i("app status run线程数量 " + threadInfo.getRunningThreadCount().size());
            AppLogUtils.i("app status wait线程数量 " + threadInfo.getWaitingThreadCount().size());
            AppLogUtils.i("app status block线程数量 " + threadInfo.getBlockThreadCount().size());
            AppLogUtils.i("app status timewait线程数量 " + threadInfo.getTimeWaitingThreadCount().size());
        }
    });

More Repositories

1

YCBlogs

技术博客笔记大汇总,包括Java基础,线程,并发,数据结构;Android技术博客等等;常用设计模式;常见的算法;网络协议知识点;部分flutter笔记;还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!转载请注明出处,谢谢!
6,403
star
2

YCAppTool

🔥🔥🔥 组件化综合案例,组件分层为:基础公共组件,功能组件,业务组件,主工程。每一层组件的建设,很详细的工程案例,很全面的一个组件化实践案例。一个超级综合案例!
Java
3,172
star
3

YCVideoPlayer

🔥🔥🔥 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer原生MediaPlayer可以自由切换内核;该播放器整体架构:播放器内核(自由切换) + 视频播放器 + 边播边缓存 + 高度定制播放器UI视图层。支持视频简单播放,列表播放,仿抖音滑动播放,自动切换播放,使用案例丰富,拓展性强。
Java
2,192
star
4

YCWebView

基于腾讯x5开源库,提高webView开发效率,大概要节约你百分之六十的时间成本。该案例支持处理js的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常error状态、支持视频播放并且可以全频、支持加载word,xls,ppt,pdf,txt等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生App、支持webView页面截图、x5库为最新版本,功能强大。
Java
1,735
star
5

YCAndroidTool

用于项目测试,崩溃重启操作,崩溃记录日志【可以查看,分享】和重启【多种重启app方式】;网路拦截查看的工具小助手,拦截请求和响应数据,统计接口请求次数,流量消耗,以及统计网络链接/dns解析/request请求/respond响应等时间。提高开发效率……
Java
749
star
6

YCStateLayout

State switching, so that the View state switch and Activity completely separate. Using builder mode to freely add the required state View, can set data, data is empty, load data error, network error, load and other states, and support the layout of custom state. At present has been used in other formal projects, strong expansion!
Java
556
star
7

YCSlideLayout

购物商场商品详情页面自定义控件,模仿淘宝、京东、考拉等商品详情页分页加载的UI效果。可以嵌套RecyclerView、WebView、ViewPager、ScrollView等等。支持设置上拉分页加载动画效果……
Java
491
star
8

YCCustomText

自定义文本控件,支持富文本,包含两种状态:编辑状态和预览状态。编辑状态中,可以对插入本地或者网络图片,可以同时插入多张有序图片和删除图片,支持图文混排,并且可以对文字内容简单操作加粗字体,设置字体下划线,支持设置文字超链接(超链接支持跳转),已经用于多个实际项目中……
Java
479
star
9

YCRefreshView

自定义支持上拉加载更多,下拉刷新,可以自定义头部和底部,可以添加多个headerView,使用一个原生recyclerView就可以搞定复杂界面。支持自由切换状态【加载中,加载成功,加载失败,没网络等状态】的控件,可以自定义状态视图View。拓展功能【支持长按拖拽,侧滑删除】,轻量级,可以选择性添加 。持续更新……
Java
454
star
10

YCUpdateApp

轻量级版本更新弹窗,弹窗上支持更新进度条,可以设置普通更新或者强制更新。解决8.0以上通知栏不显示问题,解决7.0以上安装apk异常,下载完成则会自动提示安装;下载异常,失败,错误等状态,支持重启下载任务;还支持自定义下载路径。代码量少,调用简单……
Java
446
star
11

YCCaptureTool

App综合防抓包实践,关闭代理,设置配置文件;设置单向认证或双向认证;对数据加密和解密;sign签名参数;防止xposed,root,va挂载等操作。 比较通用全面的防抓包技术方案!
Java
421
star
12

YCScrollPager

仿抖音,快手,短视频,竖直方向,一次滚动一个页面的封装库。目前支持ViewPager做法,也支持RecyclerView做法……使用ViewPager则只是修改滑动速率,以及滚动翻页过渡时间;使用recyclerView打造丝滑切换视频的功能,更多内容可以看demo
Java
376
star
13

YCNotification

通知栏封装库,强大的通知栏工具类,链式编程调用,解决了8.0以上通知栏不显示问题,支持多种不同的使用场景,兼容老版本。还有自定义通知栏view,可高度定制布局……
Java
376
star
14

YCDialog

自定义弹窗,其中包括:自定义Toast;自定义dialog控件;自定义DialogFragment弹窗;自定义PopupWindow弹窗;还有自定义Snackbar等等;简单便用。目前已经用于多个正式项目中。
Java
359
star
15

YCStudyCpp

🔥🔥🔥 c++学习案例,系统学习,c++教程,基础案例,数据类型,变量和常量,运算符,表达式,判断和循环,函数,模版函数,指针,引用,数组和容器,IO输入和输出,结构和类,继承和派生,多线程,并发,线程安全锁,内存分配,堆和栈,异常,STL标准模版,预处理器,信号处理,程序调试,网络通信,综合案例等等
C++
353
star
16

YCStatusBar

关于状态栏方案总结案例,适合于绝大多数的使用场景……同时,兼容了小米,魅族等手机状态栏字体颜色设置失效问题。已经用于实际项目投资界,新芽,沙丘大学等APP,一键集成并使用!支持单Activity多Fragment动态修改状态栏颜色,入侵性低,一行代码即可实现你需要的需求
Java
313
star
17

YCJniHelper

JNI学习案例,通过简单的案例快速入门jni开发。JNI基础语法介绍,so库生成打包和反编译,Java和C/C++相关调用案例
Java
266
star
18

YCFlutterUtils

Flutter Utils 全网最齐全的工具类。包含bus,颜色,日期,文件,json,log,sp,加解密,num,图片,网络,正则,验证,路由,文本,时间,spi,计时器,拓展类,编解码,发射,异常,字节转化,解析等等工具类。
Dart
245
star
19

YCThreadPool

轻量级简易线程池库,轻量级线程池异步库,支持线程执行过程中状态回调监测(包含成功,失败,异常等多种状态);支持创建异步任务,可以设置线程的名称,延迟执行时间,线程优先级,回调callback等;可以根据自己需要创建自己需要的线程池;线程异常时,可以打印异常日志,避免崩溃。
Java
224
star
20

YCWidgetLib

自定义控件,其中包含自定义折叠布局,拓展性强使用简单;万能自定义红点控件,充分解耦合接入方便;多种方案实现阴影效果库;自定义view和viewGroup圆角控件,彻底解决圆角问题等
Java
186
star
21

YCWalleHelper

瓦力多渠道打包的Python脚本测试工具,通过该自动化脚本,自需要run一下或者命令行运行脚本即可实现美团瓦力多渠道打包,打包速度很快。配置信息十分简单,代码中已经注释十分详细。可以自定义输出文件路径,可以修改多渠道配置信息,简单实用。
Tcl
133
star
22

YCBannerView

轮播图,支持多种自定义属性,可以设置轮播红点或者轮播数字,支持设置引导页。可以根据不同使用场景,可以选择无限循环,静态管理或者动态管理adapter,还可以设置暂停和开始轮播。后期添加了RecyclerView轮播图,同时自定义多种类型SnapHelper,卡片滑动流畅,目前已经用于多个正式项目中!!
Java
106
star
23

YCLeetcode

组件之间的通信,很友好起到隔离效果,接口+实现类,使用注解生成代码方式,无需手动注册,将使用步骤简单化,支持组件间以暴露接口提供服务的方式进行通信。
Java
76
star
24

YCStudyWeb

Web学习案例
JavaScript
71
star
25

YCToolLib

通用工具库组件,包括前后台判断,拦截器时间,心跳轮询库,Task任务库,二维码扫码库,转场动画库,通用TTS音频播放库,国际化locale库等等
Java
66
star
26

YCServerLib

gRPC学习案例,使用gRPC作为网络方案可以带来高效性、跨平台和语言、可靠性、易于使用和可扩展性等收益。同时可以减少手动编写代码的工作量,提高开发效率。
Java
51
star
27

YCStudyC

系统性学习C编程,变量,数据类型,循环,选择,输入和输出,数组和容器,函数,结构体,指针,预处理,文件操作,调试等。练习多个完整小项目:学生管理系统,贪吃蛇,万年历,推箱子,五子棋。是入手学习C的练习完整项目
C
49
star
28

YCDesignHelper

注解学习小案例,比较系统性学习注解并且应用实践。简单应用了运行期注解,通过注解实现了setContentView功能;简单应用了编译器注解,通过注解实现了防暴力点击的功能,同时支持设置时间间隔;使用注解替代枚举;使用注解一步步搭建简单路由案例。结合相应的博客,在来一些小案例,从此应该对注解有更加深入的理解……
Java
45
star
29

YCDesignBlog

设计模式,创建型设计模式,结构型设计模式,行为型设计模式,面向对象设计原则,六大设计原则,面向对象设计思想,项目架构演进。持续迭代笔记和完善案例,打造全网系统高质量的设计模式笔记!
Java
44
star
30

YCTimerHelper

倒计时工具,分别使用了handler,自定义CountDownTimer,Timer和TimerTask,chronometer控件,和属性动画实现倒计时的功能。封装CountDownTimer倒计时器【在原有基础上增加了暂停和恢复倒计时功能】,解决了倒计时无法到0和从最大值开始bug
Java
13
star
31

YCJavaBlog

Java高级进阶专栏博客,数据类型原理,泛型设计思想,面向对象,继承,封装,io流,序列化,拷贝,高效读写,反射,注解,spi机制,异常,四种引用,线程原理,线程通信,线程池设计思想,线程并发优化,上下文切换原理,CAS,锁的设计和原理,类加载,对象布局,代码攻击,内存模型,即时编译,内存回收机制,性能调优,集合设计思想
Java
7
star
32

YCComputerBlog

计算机基础博客,计算机组成原理,存储器的设计,局部性原理,地址映射,CPU处理器用途,指令架构,CPU性能,缓存一致性,Cache,MESI协议,伪共享,CPU三级缓存设计思想,输入和输出,总线系统设计,指令编程,程序如何运行,内存存储设计,物理内存和虚拟内存,共享内存设计,计算机二进制的由来,异常处理,IO流操作
4
star
33

YCSplashSdk

打开app启动页sdk,支持图片广告,也支持视频
3
star
34

YCUniApp

uni开发的项目,由于公司项目做混合开发,因此边学边做。基础入门级的案例分析,近期学习更新中
Vue
3
star
35

YCPluginTool

Plugin插件学习工具
2
star
36

YCAndroidBlog

Android技术专栏
1
star
37

yangchong211

1
star