Potato
Potato copied to clipboard
Read the fucking source code for the Android interview
# Android:How to make network requests gracefully [TOC] ## Retrofit2 在 retrofit2 的 2.6.0 版本中,增加了对 kotlin coroutines 的支持。 ### 前提 在一般的业务中,请求服务器返回的结果都有如下的格式: ```json { "result": 0, "message": "", "data": "swensun" }...
# Android: Develop Tips [TOC] 逐渐更新一些关于 Android 开发设计的一下小技巧 ## Multi-Module 多模块设计参考:[模块分层设计](https://github.com/yunshuipiao/Potato/issues/65) ## Design 屏幕适配:[建议使用今日头条屏幕适配方案](https://github.com/yunshuipiao/Potato/issues/40) ## Develop 1. 借助 Lifecycle,使得有需要的 java 类或者自定义控件,自动感知生命周期,解决内存泄漏的问题。 (参考:https://developer.android.com/topic/libraries/architecture/lifecycle) 2. 所有引入的第三方开源库,强烈建议 进行单独封装, 方便后续替换或者升级。 (比如图片记载,网络请求等等)
# Activity: Lifecycle and Launch Mode [TOC] 关于 Activty 相关的东西一直以来都是看别人总结的二手资料,从未正真的看过源码,包括官方文档的相关东西都能在源码中找到,所以 多看源码,永远不会错。 ### 继承关系 由于 Activity 的源码太多,一个类就有 8000 行代码,所以找感兴趣,当然,每个类前面的注释特别重要,属于必读内容。 ```java public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCreateContextMenuListener, ComponentCallbacks2,...
[TOC] ## 日志 每一个Android App 都会有自己的日志系统。 推荐将日志模块放在工具类模块中,不要出现一个项目中存在多个日志工具类的情况。 如果是 sdk ,将日志模块的可见性设为模块内可见。 一般都会对日志进行封装,加上自定义的tag。如下 ```kotlin object LogTest { val tag = "LogTest" fun d(msg: String) { this.d(tag, msg) } fun d(tag: String, msg:...
# 简易音乐播放器开发实录 [TOC] 最近完成了项目中关于音乐播放器开发相关的内容,之后又花了两天进行总结,特此记录。 另一方面,音乐播放器也同时用到了 Android 四大组件,对于刚接触 Android 开发的人来说也是值得去学习开发的一个功能。部分内容可能不会说的太详细。 ## 需求:音乐播放器具有的功能 1. 音乐后台播放(Service),UI 显示进度,歌曲信息 2. 音乐播放通知和锁屏通知,可操作(播放,暂停,上下一曲) 3. 音频焦点的处理(其他音乐播放器播放时相关状态更新) 4. 耳机线控模式的处理 ## UI 控制音乐播放,更新进度 关于音乐播放器的开发,官方在 5.0 以上提供的 MediaSession 框架来更方便完成音乐相关功能的开发。 大致流程是: 分为...
# Android Library For Develop [TOC] 收集安卓开发必备的开源库: 下载 Download: [lingochamp](https://github.com/lingochamp)/**[okdownload](https://github.com/lingochamp/okdownload)** 权限: * 国产 ROM:[yanzhenjie](https://github.com/yanzhenjie)/**[AndPermission](https://github.com/yanzhenjie/AndPermission)** * 原生 ROM:[googlesamples](https://github.com/googlesamples)/**[easypermissions](https://github.com/googlesamples/easypermissions)**, [tbruyelle](https://github.com/tbruyelle)/**[RxPermissions](https://github.com/tbruyelle/RxPermissions)** 网络:[square](https://github.com/square)/**[retrofit](https://github.com/square/retrofit)**
# Android: Multi Module Structure 在笔者多年的安卓开发中,有意识的在思考一个 Android 项目的目录结构,下面是我的分享。 对于一个 Android 项目,我认为至少应该分为 4个模块。工具,基础,业务功能,App模块。 ## 工具模块 请看下图:(一个小小的建议:分别以 library_, module_ 前缀)命名  如上图模块中的 module_swutils 就是整个项目最常用的工具类,应该被所有项目依赖。其内容应该与项目业务无关,包括工具类,常量,等等。比如 日志模块的封装,图片加载模块的封装。并使用 ContentProvider 进行自动注册。 ```kotlin object SwUtils { lateinit...
```kotlin /** * 创建文件 * @param path:文件路径 * @param name: 文件名 */ fun createFile(path: String, name: String): Boolean { val folder = File(path) if (!folder.exists()) { folder.mkdirs() } val file...
# Android:Intent and startActivity [TOC] 本篇文章介绍在 Android 中打开另一个 Activity 的可行性验证 ## 基础知识 ### App 的入口 Activity 和 Icon ```java ``` 任何 App 都有一个默认入口 Activity,一般在 AndroidManifest.xml 中如上配置。 如果将 category 修改为 :`...