MVP+Dagger2+Rxjava+Retrofit+Gree

作者: Rukey7 | 来源:发表于2017-03-01 21:13 被阅读21138次

    练习MVP架构开发的App,算是对自己学过的知识做一个总结,做了有一段时间,界面还算挺多的,代码量还是有的,里面做了大量封装,整体代码整理得很干净,这个我已经尽力整理了。不管是文件(Java、xml、资源文件)命名,还是布局设计尽量简单简洁。代码不会写的很复杂,整个代码结构有很高的统一度,结构也比较简单清晰,方便理解。里面做了大量的封装,包括基类的构建和工具类的封装,再配合Dagger2的使用可以极大地减轻V层(Activity和Fragment)的代码,如果你有看源码的话你会发现大部分V层有效代码不怎么会超出100行(不含import语句)。基本上每个界面都会特意去使用一些知识,所以里面有些功能不是必要的而纯粹是用了使用某些知识点。

    CSDN:http://blog.csdn.net/github_35180164/article/details/54916134

    项目地址:https://github.com/Rukey7/MvpApp

    Screenshot



    这是因为android有分不同的CPU架构,比如armv7a、armv5、X86等等,当你使用so库的时候需要根据机型来选择对应版本,而我在视频播放那个库里只引用了‘tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.2’ 这个库,应该大部分机型是这种架构,所以有的机型可能就跑不了,你可以根据你的机型来选择添加其他的,详情可以看B站的说明ijkplayer,比如:

    64位的库要求SDK21以上,B站有更新版本,如果要用的时候记得统一后面的版本号。

    2、还有一个视频播放的相关问题,就是如果你要播放其它的视频格式比如:MKV、AVI、RM等等,直接用也是播不了的,这个你需要重新编译ijkplayer去配置支持这些视频格式,具体编译方法看ijkplayer的指导说明吧,开启多种格式支持的话so就变很大了。如果你懒得编译的话我之前自己编译了一个armv7a的对应so库,你可以看这里ijkplayer-armv7a。库太大了其它版本就没传上去了,有需要在联系我吧。

    相关文章

      网友评论

      • Todo2:写的非常不错

        组件化和插件化的开发里程总结
        https://www.jianshu.com/p/df2a6717009d
      • 大BO啫:太难了……注入那块看不懂
      • zzl93:看到有网络请求有配置缓存策略我有个疑问。okhttp在POST请求的时候不支持缓存的吧。。。你在项目中使用这些缓存策略是因为接口全部都是GET请求的原因吧??
        Rukey7:@zzl93 POST缓存的话要另外处理,有这方面的功能库,你可以搜下
      • 6c1d1ad8b4f5:大神啊我在看项目的时候对这一段不是很理解,能麻烦您稍微解释一下这里为什么多次调用了subscribe和unsubscribe么,这个是Rxhelper类里面用来做封面计时的方法
        public static Observable<Integer> countdown(int time) {
        if (time < 0) {
        time = 0;
        }
        final int countTime = time;

        return Observable.interval(0, 1, TimeUnit.SECONDS)
        .map(new Func1<Long, Integer>() {
        @Override
        public Integer call(Long increaseTime) {
        return countTime - increaseTime.intValue();
        }
        })
        .take(countTime + 1)
        .subscribeOn(Schedulers.io())
        .unsubscribeOn(Schedulers.io())
        .subscribeOn(AndroidSchedulers.mainThread())
        .observeOn(AndroidSchedulers.mainThread());

        }
        Rukey7:@Redundant_1fdf unsubscribeOn()指定取消订阅的线程,subscribeOn(AndroidSchedulers.mainThread())指定doOnSubscribe()执行的线程
        6c1d1ad8b4f5:@Rukey7 就拿这段程序来说,第一个subscribeOn影响的是interval以及map所产生的事件,使得他们运行在io线程中,而observeOn影响的是消费事件所在线程,让他运行在主线程中。中间的这段.unsubscribeOn(Schedulers.io()).subscribeOn(AndroidSchedulers.mainThread())我始终还是不得要领,大神能详细的说一下这段代码影响的是什么....占用您的时间十分不好意思
        Rukey7:@Redundant_1fdf 不好意思,最近没上,你先了解下subscribeOn、unsubscribeOn和observeOn的含义,在这边使用可能不是很显著,就是对应操作的执行线程的切换,你看那些API 接口方法用这些就比较典型,会有个doOnSubscribe()方法要求执行在主线程
      • b1abbf52e607:好些人说用ijkplayer之前先要在linux环境下编译so库,难道不可以直接用github上的这个示例dependencies {
        # required, enough for most devices.
        compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.0'
        compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.0'

        # Other ABIs: optional
        compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.0'
        compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.0'
        compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.0'
        compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.0'

        # ExoPlayer as IMediaPlayer: optional, experimental
        compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.0'
        }
        Rukey7:@一帆熊 默认的so库支持视频格式有限
      • 2eb05dfb7e25:请问 新闻德尔api接口是哪里获取的呢
        Rukey7:@王小葱hx之旅 你搜下Fiddler
      • 等风来_Android:大神,为什么我下载了您的源码,跟您的目录结构不一样呢,我的里面引入了好多moudle
        Rukey7:怎么会呢,目录结构在Github上就可以看
      • fendo:import com.dl7.mvp.local.table.DaoMaster;
        import com.dl7.mvp.local.table.DaoSession;
        import com.dl7.mvp.injector.components.DaggerApplicationComponent;

        这三个类没有。。。。。
        Rukey7:make工程
      • 1f59617fe614:厉害了
      • 唐码农:今天正好有时间,整体看了下这个项目,感觉细节扣得很细,结构框架很合理。能学到好多东西,不过好像有部分界面存在内存泄露的情况
        Rukey7: @唐码农 嗯,还是有不少问题,最近较没时间去整理,看项目的时候得自己注意遇到的问题
      • 下位子:大神,这个项目大概花了你多长时间
        Rukey7:@下位子 半年前建的项目
      • 64603b7fccb3:学习学习
      • 小新先生爱捣乱:rxjava 这一套系列 一万多个方法 有洁癖的人根本受不了他的存在。。。。
      • 秋珞:大神,版本兼容还是有些问题,对于4.4以下的手机会出现崩溃现象(玩一会内存溢出),还有图片模块点击item崩溃log 如下:
        E/Tinker.SampleUncaughtExHandler: uncaughtException:Unable to start activity ComponentInfo{com.dl7.mvp/com.dl7.mvp.module.photo.bigphoto.BigPhotoActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        E/Tinker.UncaughtHandler: catch exception when loading tinker:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dl7.mvp/com.dl7.mvp.module.photo.bigphoto.BigPhotoActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2294)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2348)

        Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
        at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:351)
        at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:320)
        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:281)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143)
        at com.dl7.mvp.module.base.BaseActivity.onCreate(BaseActivity.java:78)
        Rukey7:@秋珞 确实有这个问题,style.xml少写了个theme,重新加上了
        秋珞:手机是三星手机,版本4.3
      • ReanCool:我就喜欢 称你 大神 不用虚 啊哈
      • fb5fbf432e63:答主 你用了这么多库 体积会不会很庞大.
        Rukey7:@啊哦bingo 这个解释可以:grin:
        ReanCool:这个 就是 个 集合 demo ,到时候 自己用的 时候 自己 挑选那部分就行了 就行了。 我是个路人
      • Venbro:很吊很受用,很值得学习,很感谢
      • 谢尔顿:非常喜欢,先收藏
      • 残霜丶:值得学习,这个架构也是以后做项目的方向
      • e11121f665e4:牛逼啊。
      • 王元_Trump:看起来不错的样子 收藏下
      • 碧海鱼龙:写的真的很棒,谢谢博主,期待更多的大作!
      • 唐码农:视频报错,是不是模拟器的原因
        Rukey7:@唐码农 因为模拟器翻转不方便我没用模拟器测,你看下文章的错误说明能不能处理
      • 75d896f59189:请问一下,这个项目第三方登录,分享没有做是吧
        Rukey7:@summer_xiang 你说的对,P和M现在关联的有点紧,还有很多可以改进的地方,再慢慢完善,有什么好想法可以一起交流,共同进步:grin:
        44fd7afee30c:大神,文章让我受教了,想请教下,mvp中的p是否可以粒度再细一点 抽出一个model, model中做一些网络以及数据方面的操作,p 中持有model的引用,model中有持有p的暴露出的接口。p作为model和view的桥梁。如何?谢谢!
        Rukey7:@p96246452647426 没做,我自己不会写后台,不然我就加个人中心和这些第三方功能了,第三方的SDK指导文档应该都挺清楚的,照着导进去一般没啥问题
      • 因帅被判刑:大佬 能不能加个微信好友 现在做个新项目打算用这种架构
        Rukey7:@全世界都停电 看文章里
        0bdb158b6ed4:@Rukey7 求qq群。
        Rukey7:有更新了个QQ群,我微信号也叫Rukey7
      • 8635c4858b31:你好,你这项目结构如果需要自动部署应该怎么做?因为我的项目结构跟你的类似,但因为使用jenkins和git导致停顿于此。谢谢
        Rukey7:@Mirko_Wu 看更新的错误说明
        Mirko_Wu:看不了视频哦,crash了,java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.dl7.mvp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.dl7.mvp-1/lib/arm64, /data/app/com.dl7.mvp-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]] couldn't find "libijkffmpeg.so"
        Rukey7:不好意思,我没整过jenkins:disappointed_relieved: ,没法给你好的建议,后面再学习下这东西
      • eca314e60474:厉害了,亲
      • pseudo_niaonao:大神好腻害:+1:
      • 68d58a62e55c:不错,学习学习
      • findmebyip:厉害学习学习
      • c46d63c220df:517771574@qq.com求一份看看 github下不下来
      • AllHeart:好佩服你啊:smile::smile:
      • b7cee950b3b1:不错,收藏先
      • 巴黎没有摩天轮Li:大神~有些东西没看懂,可否加你qq呢?请教一下问题!:blush:
        Rukey7: @欢呼声中不会醉 共勉😊
        逆流而鱼:@Rukey厉害了
        Rukey7:@巴黎没有摩天轮Li 363760359,你加这个吧
      • 泽毛:太叼了,点赞!
      • 我给你洗袜子:值得学习一下:grin:

      本文标题:MVP+Dagger2+Rxjava+Retrofit+Gree

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