阿里云服务器免费领卷啦。

捡代码论坛-最全的游戏源码下载技术网站!

 找回密码
 立 即 注 册

QQ登录

只需一步,快速开始

搜索
关于源码区的附件失效或欺骗帖, 处理办法
查看: 4838|回复: 2

[安卓,android源码] 『保险套』是一个超轻超薄的Android工具库

[复制链接]

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126153
QQ
发表于 2017-5-18 19:27:04 | 显示全部楼层 |阅读模式
保险套项目
『保险套』是一个超轻超薄的Android工具库,将它套在Android应用工程里裸露的Context上,再传入第三方SDK(通常是其初始化方法),即可防止三方SDK中常见的损害用户体验的行为:
  • 在后台启动大量其它应用的进程(在三方推送SDK中较为常见),导致应用启动非常缓慢,启动后一段时间内出现严重的卡顿(在中低端机型上尤其明显)。 这是由于在这些SDK初始化阶段启动的其它应用中往往也存在三方SDK的类似行为,造成了进程启动的『链式反应』,在短时间内消耗大量的CPU、文件IO及 内存资源,使得当前应用所能得到的资源被大量挤占(甚至耗尽)。
注意:此项目通常并不适用于核心功能强依赖特定外部应用或组件的SDK(如Facebook SDK、Google Play services SDK)。 如果希望在使用此类SDK时避免后台唤醒依赖的应用,仅在特定条件下(如用户主动作出相关操作时)调用SDK所依赖的应用,则可以使用本项目,并通过CondomContext.setOutboundJudge()自主控制何时放行。
快速开始
  • 首先在工程中添加对此项目的依赖项。
    对于Gradle工程,直接在模块的依赖项清单中添加下面这一行:
    1. compile 'com.oasisfeng.condom:library:1.1.1'
    复制代码

    对于非Gradle工程,请下载AAR文件放进项目模块本地的 libs 路径中,并在工程的ProGuard配置文件中增加以下规则:(Gradle工程和不使用ProGuard的工程不需要这一步)
    1. -dontwarn android.content.IContentProvider
    2. -dontwarn android.content.ContentResolver
    3. -keep class com.oasisfeng.condom.**
    复制代码

  • 略微修改三方SDK的初始化代码。
    常见的三方SDK需要调用其初始化方法,一般包含Context参数,例如:
    1. XxxClient.init(context, ...);
    复制代码

    只需将其修改为:
    1. XxxClient.init(CondomContext.wrap(context, "XxxSDK"), ...);
    复制代码

    其中参数tag(上例中的"XxxSDK")为开发者根据需要指定的用于区分多个不同CondomContext实例的标识,将出现在日志的TAG后缀。如果只有一个CondomContext实例,或者不需要区分,则传入null亦可。
  • 如果三方SDK含有自己的组件(Activity、Service、Receiver 或 Provider),为防止这些组件内的有害行为,还需要确保这些组件的工作进程与应用自己的进程隔离(android:process使用非应用自有组件的进程名),并在应用的Application.onCreate()起始部分调用CondomProcess.installExceptDefaultProcess(this)(或CondomProcess.installExcept(this, ...))。如下所示:
    1. public class MyApplication extends Application {

    2.   @Override public void onCreate() {
    3.     CondomProcess.installExceptDefaultProcess(this);
    4.     ...
    5.   }
    6. }
    复制代码

完成以上的简单修改后,三方SDK就无法再使用这个套上了保险套的Context去唤醒当前并没有进程在运行的其它app。(已有进程在运行中的app仍可以被关联调用,因为不存在大量进程连锁创建的巨大资源开销,因此是被允许的。这也是Android O开始实施的限制原则)
工作原理
CondomContext是一个加入了特定API拦截和调整机制的ContextWrapper,它只作用于通过这个CondomContext实例发生的行为,完全不会触及除此之外的其它Context,因此不必担心对应用的自有功能造成影响,可以放心的使用。其中涉及到的调整和拦截包括:(可通过配置CondomOptions选择性使用)
  • 开发者可主动设置一个OutboundJudge回调,方便根据需求定制拦截策略。
  • 避免通过此Context发出的广播启动其它应用的进程。在Android N以上,通过为非应用内广播的Intent添加FLAG_RECEIVER_EXCLUDE_BACKGROUND标志达成;在低版本Android系统中,通过添加FLAG_RECEIVER_REGISTERED_ONLY达到类似的效果。
  • 避免通过此Context发出的广播或请求的服务启动已被用户强行停止的应用。通过为发往应用之外的广播或服务请求Intent添加FLAG_EXCLUDE_STOPPED_PACKAGES标识达成。
CondomProcess采用了更偏底层的API拦截策略对整个进程内与系统服务之间的IPC通信进行拦截和调整,达到与CondomContext类似的效果。由于它被设计为工作在三方SDK组件的独立进程内,因此也不会对应用的自有功能造成任何影响。

下载地址:
  1. https://github.com/oasisfeng/condom
复制代码



捡代码论坛-最全的游戏源码下载技术网站! - 论坛版权郑重声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与捡代码论坛-最全的游戏源码下载技术网站!享有帖子相关版权
3、捡代码论坛版权,详细了解请点击。
4、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。
5、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。 我们不承担任何技术及版权问题,且不对任何资源负法律责任。
6、如无法链接失效或侵犯版权,请给我们来信:jiandaima@foxmail.com

回复

使用道具 举报

4208

主题

210

回帖

12万

积分

管理员

管理员

Rank: 9Rank: 9Rank: 9

积分
126153
QQ
 楼主| 发表于 2017-5-19 09:49:11 | 显示全部楼层
登录可见评论
回复

使用道具 举报

0

主题

8

回帖

66

积分

注册会员

Rank: 2

积分
66
发表于 2020-3-31 10:35:26 | 显示全部楼层
登录可见评论
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立 即 注 册

本版积分规则

技术支持
在线咨询
QQ咨询
3351529868

QQ|手机版|小黑屋|捡代码论坛-专业源码分享下载 ( 陕ICP备15015195号-1|网站地图

GMT+8, 2024-4-20 00:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表