一些实用的Android进阶小技巧

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 主要是利用application获取唯一的全局实例context,使得我们在任何场景都可以获取context

一、全局获取Context

主要是利用application获取唯一的全局实例context,使得我们在任何场景都可以获取context

举个栗子

class MyApplication : Application() {
    companion object{
        @SuppressLint("StaticFieldLeak")
        lateinit var context: Context
        //这里由于是全局唯一的实例,不会发生内存泄漏的问题,故可以放心加上注解
    }

    override fun onCreate() {
        super.onCreate()
        context = applicationContext
    }
}
//这里其实也可以添加你想要全局获取的变量或者其他的全局唯一的

二、使用Intent传递对象

1.Serializable

采取序列化的方式传递对象,不过对象传递过去是一个新的对象与旧的对象拥有一样的数据

class Person:Serializable {
    var name = ""
    var age = 0
}
//就实现了一个接口是不是非常简单
//传递就比较简单了不举例了
//在另一个activity里面的接收数据稍微不一样
val person = intent.getSerializableExtra("person_data") as Person

2.Parcelable

其工作原理是将对象进行分解,效率上比Serializable高,不过代码方面相对而言比较复杂

不过幸好kotlin将其封装成比较简单的方式

@Parcelize
class Person(var name:String ,var age:Int):Parcelable
//这里需要注意的是数据必须封装在主构造函数中才可以
//调用的时候有点不同,主要是内部封装和kotlin的空指针检查机制
val person = intent.getSerializableExtra("person_data") as Person?

三、定制日志工具

主要应用背景是当一个庞大的工程打印了大量的日志,有些日志是不需要在应用上线时打印出来的,但单纯靠删除代码或者其他方式

都不是一个明智的选择,可能以后会再用到,所以封装一个日志控制工具是非常有必要的,举个栗子即可

object LogUtil {
    private const val VERBOSE = 1
    private const val DEBUG = 2
    private const val INFO = 3
    private const val WARN = 4
    private const val ERROR = 5
    private var level = ERROR

    fun v(tag:String,msg:String){
        if (level <= VERBOSE){
            Log.v(tag,msg)
        }
    }
    fun d(tag: String,msg: String){
        if (level <= DEBUG){
            Log.d(tag, msg)
        }
    }
    fun i(tag: String,msg: String){
        if (level <= INFO){
            Log.i(tag, msg)
        }
    }
    fun w(tag: String,msg: String){
        if (level <= WARN){
            Log.w(tag, msg)
        }
    }
    fun e(tag: String,msg: String){
        if (level <= ERROR){
            Log.e(tag, msg)
        }
    }
}
//当你需要控制日志输出时改一下level即可
//代码基本上都比较简单
//使用日志的方法和以前基本相同
LogUtil.d("dd","ddd")

四、深色主题

这个应该是近几年才开始比较流行的,以前都是单调的浅色主题,其实Google对于此方面的支持还是比较好的

基本上新建项目都会帮你创建好,而且最主要是Android 10.0是支持自动将app的主题替换成深色主题的功能的

可能是考虑到低版本没有这种功能,有些软件内部自带深色主题

为了兼容低版本,深色主题需要考虑系统的差异性编程,这部分可以开发到了再看

不是非常难,这里有一个判断是否为深色主题的方法

fun isDarkTheme(context: Context):Boolean{
        val flag = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
        return flag == Configuration.UI_MODE_NIGHT_YES
 }

这边当时遇到一些小问题

在这里插入图片描述

意思就是差异化编程的话,你代码那边两边需要一致,不能主题差异太大🤣🤣🤣

五、Kotlin:java一键转kotlin

Android Studio真的就需要一个按钮就可以转化了,不过由于转化只是通过简单的语法变化规律转化

所以我们在转化后还需要手动进行一些优化,不过已经减轻很多负担了。这个也不举例了

至此全部kotlin以及android的基本知识已经学完了,下一次博客就是最终检验学习成果的实战

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
安全 Android开发 开发者
【Android开发小技巧】扔掉这坑人的 Handler
【Android开发小技巧】扔掉这坑人的 Handler
59 0
|
3月前
|
API Android开发
Android高手进阶教程(十五)之---通过Location获取Address的使用!
Android高手进阶教程(十五)之---通过Location获取Address的使用!
34 1
|
2月前
|
存储 算法 Java
Android 进阶——代码插桩必知必会&ASM7字节码操作
Android 进阶——代码插桩必知必会&ASM7字节码操作
116 0
|
3月前
|
缓存 网络协议 Java
挑战全网,史上最全Android开发进阶,跳槽复习指南(1),掌握这6大技能体系
挑战全网,史上最全Android开发进阶,跳槽复习指南(1),掌握这6大技能体系
|
3月前
|
算法 安全 Java
2024年Android最新知识体系最强总结(全方面覆盖Android知识结构,BAT面试&学习进阶)
2024年Android最新知识体系最强总结(全方面覆盖Android知识结构,BAT面试&学习进阶)
|
3月前
|
消息中间件 缓存 架构师
2024年阿里Android高级面试题分享,附学习笔记+面试整理+进阶书籍
2024年阿里Android高级面试题分享,附学习笔记+面试整理+进阶书籍
|
3月前
|
Android开发
Android开发小技巧:怎样在 textview 前面加上一个小图标。
Android开发小技巧:怎样在 textview 前面加上一个小图标。
74 0
|
11月前
|
编解码 网络协议 Android开发
Android平台RTMP|RTSP直播播放器功能进阶探讨
很多开发者在跟我聊天的时候,经常问我,为什么一个RTMP或RTSP播放器,你们需要设计那么多的接口,真的有必要吗?带着这样的疑惑,我们今天聊聊Android平台RTMP、RTSP播放器常规功能,如软硬解码设置、实时音量调节、实时快照、实时录像、视频view翻转和旋转、画面填充模式设定、解码后YUV、RGB数据回调等:
154 0
|
Android开发
【Android小技巧】分享Android Studio常用快捷键(持续更新)
ctrl+F4:关闭窗口 ctrl+H:打开此类的继承关系 ctrl+tab:切换窗口(应用内) ctrl+s:保存(好习惯需养成) shift+F10:编译运行 ctrl+l:在当前类查找关键词 Alt+7:查看此类的结构(方法、变量等) ctrl+p:查看此方法所有重载(光标需在括号内)
123 0
|
Web App开发 编解码 前端开发
Android | 音视频方向进阶路线及资源合集
但是系统相机和系统控件VideoView的局限性都是可定制型太差,系统相机的图像分辨率,视频码率以及VideoView的进度条等.
217 0