美文网首页
Launcher的负一屏方案总结

Launcher的负一屏方案总结

作者: 汪和呆喵 | 来源:发表于2018-10-23 14:25 被阅读0次

    方案一:app插件化方案

    负一屏View的添加方法:

    在Launcher里bindScreens()时判断hasCustomContentToLeft,向workspace添加一页CellLayout
    负一屏App使用插件话方案,Launcher利用反射调用负一屏app里的类和方法创建View。
    可以实现多种不同的负一屏。

    App插件化方案基本原理:

    获取插件app的Context

    Context e = activity.getApplicationContext().createPackageContext(targetPackageName, 
    Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
    

    利用反射接口取得第三方应用里的代理类,并进行构造:

    Class clazz = e.getClassLoader().loadClass(targetClassName);
    Constructor constructor = clazz.getDeclaredConstructor(new Class[]{Context.class, Activity.class});
    Object mPageProxyImpl = constructor.newInstance(new Object[]{pkgContext, activity});
    

    该方案优缺点:
    1.负一屏View使用Launcher3自带的customLayout方案,实现简单
    2.独立化方案可以使launcher和负一屏的开发解耦
    3.负一屏仍运行在Launcher进程,如果负一屏业务太多,则会影响Launcher的内存占用
    4.两个apk间的数据传递仍存在问题,需要通过进程间通信方案解决

    方案二:app插件化方案

    导入google官方定义了两个interface接口,ILauncherOverlay和ILauncherOverlayCallback
    通过aidl进程间通信,从Launcher向负一屏app传递scroll数据
    负一屏使用WindowManager.addView的方式添加浮动窗口
    用translationX改变负一屏View的位置
    可参考:
    https://blog.csdn.net/u013032242/article/details/82885110
    该方案的优缺点:

    1. 负一屏View的实现较方案一难度大
    2. 与Launcher完美解耦,运行在独立的进程里,不存在影响Launcher内存问题。

    相关文章

      网友评论

          本文标题:Launcher的负一屏方案总结

          本文链接:https://www.haomeiwen.com/subject/bspozftx.html