我也玩Android

作者: zhongya666 | 来源:发表于2021-08-02 17:41 被阅读0次

时间过的飞快,蓦然回首,发现自己做Android开发也好久了,坐在电脑前发呆两小时后,再不做点什么真的对不起自己的发际线,好了老铁们,那我就从现在开始吧!


2.jpg

项目简介

3.jpg
wan01_状态 1(1).png

Android的技术在不断更新,我也结合当前的技术把之前的代码回炉重造,符合主流市场app的技术,我就简单哔哔几句项目架构:
Retrofit + ARouter + 组件化 + Jetpack + pagging3 + MVVM + 协程 + Koin + Coil
项目仓库WanApk
如果此项目对你有帮助和价值,烦请给个star,或者有什么好的建议或意见,也可以发个issues,感谢!

项目详情

1、如何独立运行一个Module?

我们只需要在根目录下gradle.properties中添加一个singleModule标志位,该标志位可以用来表示当前Module是否是独立模块,true表示处于独立模块,可单独运行,false则表示是一个library。

org.gradle.jvmargs=-Xmx2048m
android.useAndroidX=true
android.enableJetifier=true
#是否是需要单独运行某个模块
singleModule=true
#singleModule=false

在每个Modulebuild.gradle中加入singleModule的判断,运行总App时,子Module是属于library,而独立运行时,子Module是属于application。配置如下:

if (singleModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}

当然AndroidManifest文件也同理,毕竟在singleModule模式下每个可以独立运行的Module都要单独设置应用图标、名称、<intent-filter>等。

sourceSets{
        main {
            if (singleModule.toBoolean()) {
                manifest.srcFile 'src/main/alone/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }

编译运行后,桌面会出现多个应用图标,如下:(考虑到组件化的使用场景,就独立出一个跟app模块耦合性低的模块。玩库是为我另一个项目WanLibrary而作,主要对我封装的万能小控件做一些演示,其代码简单易懂)

IMG_20210801_230635.jpg
那问题来了,组件间如何通信?
主要借助阿里的路由框架ARouter
2、Jetpack组件
2.1、Navigation

Navigation是一个管理Fragment切换的组件,支持可视化处理。开发者也完全不用操心Fragment的切换逻辑。
在使用Navigation的过程中,会出现点击back按键,界面会重新走了onCreate生命周期,并且将页面重构。目前比较好的解决方法是自定义NavHostFragment,将内部replace替换为show/hide。

2.2、Paging3

Paging是一个分页组件,主要与Recyclerview结合分页加载数据。具体使用可参考首页项目模块。
UI层:

class DailyQuestionFragment : BaseAppFragment<HomeFragmentDailyQuestionBinding>(
    ...
    override fun lazyLoadData() {
        lifecycleScope.launchWhenCreated {
            viewModel.dailyQuestionPagingFlow().collectLatest {
                pagingAdapter.submitData(it)
            }
        }
    }
    ...
}

ViewModel层:

class DailyQuestionViewModel(
    val repo: HomeRepo,
    val personalRepo: PersonalRepo
) : BaseViewModel() {
    ...
    /**
     * 请求每日一问数据
     */
    fun dailyQuestionPagingFlow(): Flow<PagingData<ArticleData>> =
        repo.getDailyQuestion().cachedIn(viewModelScope)
   ...
}

Repository层

class HomeRepo : BaseRepository() {
    ...
    /**
     * 请求每日一问
     */
    fun getDailyQuestion(): Flow<PagingData<ArticleData>> {
        return Pager(config) {
            DailyQuestionPagingSource(service)
        }.flow
    }
    ...
}

PagingSource层:

/**
 * GitHub/Gitee:zhongya666 2021/7/8 9:41
 * 每日一问数据源,主要配合Paging3进行数据请求与显示
 */

class DailyQuestionPagingSource(private val service: HomeApi) :
    PagingSource<Int, ArticleData>() {
    override fun getRefreshKey(state: PagingState<Int, ArticleData>): Int? = null

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ArticleData> {
        return try {
            val pageNum = params.key ?: 1
            val data = service.getDailyQuestion(pageNum)
            val preKey = if (pageNum > 1) pageNum - 1 else null
            LoadResult.Page(data.data?.datas!!, prevKey = preKey, nextKey = pageNum + 1)

        } catch (e: Exception) {
            LoadResult.Error(e)
        }
    }
}

版本

持续更新
下期会手写h5,嵌入到webview中,并实现Android与h5交互(混合开发)

感谢

付十一
API: 鸿洋大大提供的 WanAndroid API

相关文章

  • 我也玩Android

    时间过的飞快,蓦然回首,发现自己做Android开发也好久了,坐在电脑前发呆两小时后,再不做点什么真的对不起自己的...

  • 全新开源app玩Android上线啦

    介绍: 玩Android app是基于玩Android网开发, 有关详情, 请移步玩Android官网 : htt...

  • 我也玩LARAVEL

    一、框架概述 课程概述 laravel 4天(之前TP框架还是很大的区别)(国外框架) 在线教育平台 6天(lar...

  • Kotlin写一个玩Android客户端

    鸿洋大神的玩Android网站 接口由玩Android提供的公开接口API 代码结构Kotlin + MVP + ...

  • 玩,非玩也

    前天,爸爸买来一个冰柜,拆装后有了一个大纸箱。这个大纸箱成了侄子的好玩具。他说这个可以当他的“小房子"。他的喜悦和...

  • 我也这么和你玩

    中原焦点坚持分享第1313天 20201012 铅笔拿在左手,露出笔尖,不时地戳向周围的伙伴。危险的一幕,正好被我...

  • 玩,也让我思考!

    今天玩了一天。中午吃烧烤,下午K歌,晚上吃客家菜。吃好喝好玩好,我们部门玩得好充实。 一整天都在玩,在每个环节,我...

  • Weex开发之Git忽略文件的配置(二)

    前言 此系列文章主要用于记录本人使用Weex开发玩Android的过程。 玩Android 开放API Aweso...

  • Kotlin 开发一个玩Android客户端

    一、说明 一个Kotlin版的玩Android App,基于鸿洋大神的玩Android开放API开发,旨在学习 K...

  • 开发WanAndroid客户端的点点滴滴(1)

    前言 前不久,鸿洋大神搭建了一个自己运营的网站玩Android,并开放了玩Android Api,很多Androi...

网友评论

    本文标题:我也玩Android

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