- 博客(21)
- 收藏
- 关注
原创 grpc-java examples运行及遇到的问题
调试运行grpc-java官方demo,examples。默认你已经下载了androidstudio,并配置好了android开发环境。这是本人在运行demo过程中的总结,如需查看官方文档,请参阅。
2023-01-15 14:38:22
300
原创 理解gradle和gradlew
最近在跑grpc官方示例程序的时候,用到了在命令行中使用gradle编译生成代码。对gradle和gradlew做了一些了解。
2023-01-14 20:30:24
674
翻译 初始GRPC(二)
例如,服务器可以等到收到客户端的所有消息后再编写消息,或者服务器和客户端可以打“乒乓球”——服务器收到请求,然后发回响应,然后客户端根据响应发送另一个请求,依此类推。元数据是有关特定RPC调用的信息(如身份验证详细信息),其形式为键值对列表,其中键是字符串,值通常是字符串,但也可以是二进制数据。元数据是有关特定RPC调用的信息(如身份验证详细信息),其形式为键值对列表,其中键是字符串,值通常是字符串,但也可以是二进制数据。gRPC不使用用户定义的元数据,它允许客户端向服务器提供与调用相关的信息,反之亦然。
2023-01-14 14:51:56
207
原创 初步了解GRPC(一)
RPC是Remote Procedure Call的简称,翻译成中文就是远程过程调用。区别于LPC,Local Procedure Call本地过程调用。RPC就是提供跨进程访问的一种机制。我们知道不同进程之间是不能直接访问的,需要通过跨进程访问的方式进行互相调用。安卓跨进程的方式有:Binder、ContentProvide、Handler、GRPC跨进程调用的过程如下图:详细了解RPC可以参阅如何给老婆解释什么是RPC,文章通俗易懂,浅显有趣。可以阅读官方文档。
2023-01-10 21:29:14
314
原创 一口气看完View的绘制流程
上面注释很清楚,说的是,addViewInner将调用chid.requestLayout(),当设置新的LayoutParams,然而,我们在这之前调用requestLayout方法,所以child的请求将在我们这个级别阻塞。最后,在measureHierarchy方法中,调用了performMeasure方法之后,也调用了performLayout方法和performDraw方法,确定了view的位置,以及将view绘制在了屏幕上。方法,这里的root是ViewGroup。
2022-12-29 22:15:26
112
原创 Jetpack LiveData
LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。详细介绍参阅官方文档1.实例化一个LiveData,因为LiveData是抽象类,所以一般实例化其子类MutableLiveData2.通过setValue、postValue方法设置要观察的对象3.通过observer
2022-06-01 13:50:22
141
原创 JetPack Lifecycle
JetPack Lifecycle1 .Lifecyle组件简介LifeCycle组件是一个用于观察activity/fragment生命周期的组件。2.相关类1.Lifecycle 是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态。图 1. 构成 Android Activity 生命周期的状态和事件类可以通过实现 DefaultLifecycleObserver 并替换相应的方法(如 onCreate 和 onStart
2022-05-29 16:15:47
107
原创 协程 组合挂起函数
协程 组合挂起函数1.按默认的顺序执行假设我们有两个挂起函数声明在任何地方,它做一些有用的事情像访问远程服务或者进行计算密集型操作。我们假设它上有意义的,但实际上,出于此示例的目的,每个都只是延迟一秒钟:suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are doing something useful here return 13}suspend fun doSomethingUseful
2022-05-17 23:33:44
314
原创 协程的取消与超时
协程的取消与超时1.取消协程的执行一个长时间运行的应用程序,你可能需要细粒度的控制后台协程。例如,你已经关闭了一个启动协程的页面,该协程的运行结果已经不再需要,该协程可以取消其操作。launch函数返回了job实例,可以使正在运行的协程取消。import kotlinx.coroutines.*fun main() = runBlocking { val job = launch { repeat(1000) { i -> println("j
2022-05-17 12:48:33
825
原创 Corountin协程基础
Corountin协程基础本文是阅读官方文档,结合自己的理解而写,如有错误之处,还请不吝斧正。也可直接阅读官方文档链接如下:https://kotlinlang.org/docs/coroutines-basics.html1.什么是协程和线程有什么区别?协程相对于线程,就好比线程相对于进程概念。一个进程可以运行多个线程,一个线程上也可以运行多个协程。协程运行在线程上,可以把一段代码挂起运行在一个线程上,并在运行结束后再另个一线程上恢复。2.第一个协程程序import kotlinx.coro
2022-05-16 22:52:16
111
原创 Java中 ? extends T 和 ? super T 的理解
Java中 ? extends T 和 ? super T 的理解有关extends和super的理解 class Food{} class Fruit extends Food{} class Apple extends Fruit{} public void test() { //表示只知道元素是Fruit子类,但不知道是那个子类,所以不允许任何继承于Fruit的子类存入该集合 //但是允许从该集合中获取元素,获取的元素可以向上转型为F
2022-05-16 17:35:52
362
原创 Retrofit源码解析
Retrofit源码解析1.基本使用retrofit一般和okhttp配合使用首先创建okhttpClient实例对象 val okHttpClient by lazy { val build = OkHttpClient.Builder() build.readTimeout(10000, TimeUnit.MILLISECONDS) build.writeTimeout(10000, TimeUnit.MILLISECONDS)
2022-05-15 12:37:27
245
原创 Flutter开发环境配置
文章目录前言一、打开Flutter官网二、安装和环境配置1.查看中国网络环境下使用flutter这篇文章2.Mac上设置3.Windows上设置4.AndroidStudio插件安装前言Android开发配置Flutter开发环境本文描述了个人配置Flutter开发环境的过程及遇到的一些问题,供大家参考。(请先安装androidstudio并配置好环境)一、打开Flutter官网flutter中文网flutter官网以flutter中文网为例,进入flutter中文网,点击Get Sta
2022-04-15 21:22:00
4357
原创 Androidstudio编译工程找不到对应的gradle-x.xx-all.zip文件的解决方法
有时间我们会遇到Gradle下载不下来的问题,如果解决呢?首先在项目工程的gradle/wrapper目录下打开gradle-wrapper.properties文件
2022-04-15 11:09:54
5422
原创 基于Androidx+Fragment源码分析fragment重叠的原因
本文基于implementation "androidx.fragment:fragment-ktx:1.3.1"源码,分析了为什么fragment以show/hide方式,在Activity内存不足重新打开时会出现重叠问题的原因,及解决思路。首先查看Activity的super.onSaveInstanceState(outState)方法最后会在Activity中的onSaveInstanceState方法中看到Parcelable p = mFragments.saveAllState();i
2021-03-19 17:08:19
329
原创 BottomNavigation+fragment实现,解决因内存不足系统回收Activity,或者屏幕旋转导致Activiy重建导致fragment重叠的问题
1.基于BottomNavigation+fragment通过show/hide的方式实现首页面2.出现fragment重叠的原因可点击这里查看具体原因总结如下:因内存不足导致Activity被系统回收,或者屏幕旋转导致Activity重建,Activity会保存fragment的实例,但是不会保存fragment show/hide的状态,当Activity重建时,重新走onCreate方法,会重新创建fragment的实例,此时重新创建的fragment实例,和Activity保存的fragme
2021-03-10 16:46:08
598
原创 Https原理详解
Http 超文本传输协议Https 安全套接字超文本传输协议Https用到了ssl加密技术,了解ssl需要先了解加密相关的知识。有关知识为什么是对称加密,什么是非对称加密?什么是数字摘要?什么是数字签名?1.对称加密和非对称加密1、对称加密(也叫私钥加密),是指加密和解密使用相同的密钥的加密算法。有时又叫传统加密算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥或者单密钥算法,常见
2021-01-29 14:39:14
197
原创 okhttp3.9.1源码初探
okhttp3.9.1源码初探简单调用方式get同步调用调用public class GetExample {//1.创建OkHttpClient对象 OkHttpClient client = new OkHttpClient(); String run(String url) throws IOException { //2.通过Builder建造者模式创建Request对象 Request request = new Request.Builder()
2021-01-27 09:51:23
179
原创 android适配华为虚拟键
在做横竖屏展示时,发现网上适配虚拟键代码没有做横屏状态下适配,导致横屏状态下,底部虚拟键遮挡了布局内容。所以横屏状态下也需要适配华为虚拟键。只需要在content布局改变时,同时记录当前可用的视图宽度,重新请求布局即可。下面是代码:import android.content.Context;import android.content.res.Resources;import an...
2018-08-15 14:04:50
636
转载 Android自定义View相关知识
##自定义View类型继承 View 重写 onDraw继承 ViewGroup 派生特定的 Layout继承特定的 View (比如 TextView , ListView )继承特定的 Layout (比如 LinearLayout )###自定义View须知让 view 支持 wrap_content如果有必要,让你的 view 支持 padding尽量不要在 view 中使用 Handler ,没必要。
2017-06-28 22:52:32
290
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人