自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (1)
  • 收藏
  • 关注

原创 移动应用项目架构设计

将界面分为界面元素(例如TextView)和界面状态(例填充TextView的数据)。UDF可为状态提供周期建模,还将”状态变化来源位置“、”转换位置“、”最终使用位置“分离开来。按照分层的架构思想,从下到上分为ShareLib(共享库)层、Core(核心功能)层、Business(业务逻辑)层、App(应用展示)层。在数据层将业务逻辑与数据访问通过接口隔离,可以方便的替换底层的数据访问实现。状态的更改遵循明确定义的模式,即状态更改是用户事件及其数据拉取来源共同作用的结果。将逻辑分为界面逻辑和业务逻辑。

2023-07-31 18:03:21 286

原创 OpenGL渲染视图种类及使用场景区别

SurfaceView SurfaceTexture TextureView 区别

2022-10-25 11:33:49 332 1

原创 RecyclerView嵌套,StaggeredLayoutManager刷新后位置信息丢失

当父RecyclerView使用notifyDataChanged时候,子RecyclerView内的Item位置信息丢失,直接从父布局顶部开始布局。RecyclerView嵌套,子RecyclerView采用StaggeredLayoutManager布局管理。参考:https://juejin.cn/post/6904448415237668878。

2022-08-24 18:28:14 246

原创 Android Q(10)系统上的异常生命周期事件

Android10系统上因windowIsTranslucent引起的生命周期异常

2022-08-22 16:06:15 880

原创 Android事件输入和传递系统

Android事件输入和传递系统事件的产生和传递按键事件触摸事件鼠标事件轨迹球事件InputEvent 输入事件的基类,派生两个类型的子类KeyEvent和TouchEvent。整个事件处理流程如下:事件采集(由Linux驱动支持) -> 前期处理(提取有用信息) -> WindowManagerService分发 -> 应用程序处理这里主要搞清楚两个问题:1、输入事件是怎么监听到的?2、监听到事件是怎么分发到应用程序中的?InputManagerService

2021-05-22 11:34:27 592 5

原创 Android中的四大组件详解

Android中的四大组件详解我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity、Service、BroadcastReceiver、ContentProvider。它们用于在应用开发过程中,不同场景的功能实现。Activity:Activity是开发中最常用的,也是最复杂的一个组件。它是用户可以专注做一些事情的东西。它的主要功能就是可以和用户进行交互操作,所以几乎所有的Activity都会负责创建一个显示窗口,然后通过setContentView

2021-04-27 12:05:17 4023 1

原创 Linux上安装chrome并执行selenium测试(Python)

1. 下载chrome安装包wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb2. 安装chromesudo apt install google-chrome-stable_current_amd64.deb5. 下载Seleniumpip install selenium同时还要下载chrome浏览器的驱动。https://sites.google.com/a/chromium.o

2021-04-14 18:34:51 739

原创 BroadcastReceiver详解

BroadcastReceiver详解使用方式在Manifest.xml文件中注册<receiver android:name=".test.broadcast.MyTestReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNEC

2021-04-01 11:49:09 606

原创 Flutter 必不可少的自动化测试

Flutter 必不可少的自动化测试Flutter中包含了三种测试分类:单元测试 Unit TestWidget测试 Widget Test集成测试 Integration Test一般来说,一个测试良好的App应该包含很多的单元测试和Widget测试,来达到较高的代码覆盖率,然后再加上足够的集成测试来覆盖所有重要的使用场景。下图展示了三种测试分类从修复难度、外部依赖、执行速度、可信任度四个方面的特点,下面分别说明三类测试的一般性规则和编写方式。事先添加好测试相关的依赖:dev_dep

2021-04-01 11:46:00 2015

原创 Bitmap详解

Bitmap详解我们都知道,在显示图片时,可以图片文件解析为Bitmap,然后交给ImageView控件去展示。所以,Bitmap就代表了一张解码后的,用于显示到屏幕上的图片数据。这里需要注意的是,一张图片文件(无论从网络下载,还是从磁盘读取)是怎么显示到屏幕上的。图像的拍摄相机种类分为两大类:老式的胶片相机和新式的数码相机,他们的成像方式有很大的区别。胶片相机通过镜头将光线投影到胶片上,所以感光元件是胶片,胶片上有无数的银盐颗粒,越是专业的胶片颗粒越多,通过银盐颗粒的感光物理属性,将图像记录下

2021-01-28 19:05:20 2171

原创 Linux系统调用函数说明

一、进程控制:fork创建一个新进程clone按指定条件创建子进程execve运行可执行文件exit中止进程_exit立即中止当前进程getdtablesize进程所能打开的最大文件数getpgid获取指定进程组标识号setpgid设置指定进程组标志号getpgrp获取当前进程组标识号setpgrp设置当前进程组标志号getpid获取进程标识号getppid获取父进程标识号getpriority获取调度优先级setpriority设置调度优先级mod

2020-11-04 18:44:37 425

原创 解决通过WindowManager添加的View无法响应返回按键

解决通过WindowManager添加的View无法响应返回按键最近在测试是否能够在子线程中操作UI问题时,发现通过WindowManager的addView(View view, ViewGroup.LayoutParams params)方法在当前线程添加一个View后,点击物理返回按键没有反应。代码如下:public void addViewByWM(Context context) { View rootView = LayoutInflater.from(context).inflate(R

2020-10-30 18:31:07 2386 2

原创 Java与C语言中的锁

Java与C语言中的锁C嵌入式汇编的语法格式是:asm(code: output operand list: input operand list: clobber list)__asm__是GCC关键字asm的宏定义寄存器其添加%,例如%0,就是0号寄存器b,w,l分别表示字节,字,双字output operand list 和 input operand list是c代码和嵌入式汇编代码的接口,clobber list描述了汇编代码对寄存器的修改情况volatile关键字易变性

2020-09-10 17:23:45 1100 1

原创 ThreadLocal应用与实现

ThreadLocal应用与实现什么是ThreadLocal以及如何使用ThreadLocal 直译过来就是线程本地变量的意思。它是一个容器类,可以存入其他对象类型。它的作用就是控制多个线程对同一个ThreadLocal变量读取和写入时,可以做到相互独立,互不影响。并且对多次get()操作返回的值是同一个。ThreadLocal有两种初始化方式:使用ThreadLocal的set(Object)方法设置初始值。重写initialValues()方法,返回初始值。当调用get()方法获取值时,如

2020-08-18 19:02:45 532

原创 Java中的线程和线程池

Java中的线程和线程池什么是线程线程是CPU进行程序调度的最小单元。线程之间拥有独立的栈空间和程序计数器。两种使用方式继承Thread类实现Runnable接口线程执行时会调用Runnable接口的run()方法。线程状态NEW 已创建,未启动RUNNABLE 在JVM中,线程正在执行或等待CPU调度BLOCKED 阻塞,等待监视器锁WAITING 不定期等待其他线程执行特定操作,如Object.wait Thread.join LockSupport.parkTIMED_W

2020-08-18 10:47:34 378

原创 分享网页到FaceBook的问题

分享网页到FaceBook的问题由于项目中需要分享一个网页到社交App中,供C端用户使用。如分享到微信、Facebook、WhatsApp等。分享到微信时很简单,只需要按照微信提供的分享SDK要求参数传入就可以了。这些参数包含标题、描述、图片和点击的网页链接,需要注意的是文字长度和图片尺寸不要超过微信的要求即可。但是当分享网页到Facebook时,Facebook使用的是Open Graph Protocol(开发图谱协议)从网页链接对应的Html文件中解析特定meta标签,来获取展示在好友动态中的

2020-08-05 18:07:36 3108 2

原创 Java中的Object

Java中的ObjectObject类的几个方法方法说明native void registerNative()注册本地方法,负责将其他几个本地方法注册到JVM中native Class<?> getClass()获取该对象所属的类对象native int hashCode()获取当前对象的哈希码,可用于哈希表中的标识boolean equals(Object)和另外一个对象比较是否相等native Object clone()创建并返回

2020-06-24 17:31:39 603

翻译 JNI

JNIJNI是指Java原生接口,它允许在Java虚拟机中的运行的Java代码与其他编程语言(如C、C++、汇编)编写的程序和库进行互操作。它是一种调用规范,我们的编写的JNI程序可以运行在任何实现了该JNI规范的商业虚拟机上。JNI原生接口规范背景尽快完全可以用Java编写应用程序,但是在某些情况下,仅仅Java无法满足应用程序的需求,这时需要本机方法来处理这些情况。标准Java类库不支持应用程序所需的平台相关的功能复用其他语言编写的库使用较低级别的语言如汇编来实现对运行时间要求较高的代码

2020-06-19 15:26:36 259

原创 使用系统分享功能分享到微信的问题

在这里记录一个小问题,在直接使用系统分享功能,即设置Intent的Action为Intent.ACTION_SEND,分享图片到微信好友时,当微信处于打开的状态时,只能唤起微信,而不能选择分享好友选择列表。代码如下:public static Intent shareImageToOtherApp(Context context, File imageFile) throws Exception { if (context == null || imageFile == null || !

2020-06-17 18:57:34 1000

原创 Java中的IO

Java中的IO不同的IO的方式是以不同的抽象模型和交互方式区分的。BIO Block IO 同步阻塞NIO NonBlock IO 多路复用,同步非阻塞AIO Async IO 异步非阻塞BIO最传统的IO模型,基于流模型实现,如文件流、网络流等。交互方式是同步、阻塞的方式。在读取或写入完成之前,线程会一直阻塞。代码会可靠的顺序执行。下面是使用BIO的Socket Api实现的网络Server端,accept()方法会一直阻塞,直到有客户端连接上来。为了更多的客户端提供服务,一

2020-06-01 15:48:26 267

原创 Android中的智能指针

Android中的智能指针C/C++项目中常见的指针问题有三类:指针没有初始化,或者新申请的内存块没有按照情况进行初始化。new/delete操作符没有匹配使用,忘记delete造成内存泄漏。野指针。一个对象不知道有多少个指针引用它,当对象被在错误的时机销毁时,引用它的指针就变成了野指针。为了解决上面三个问题,智能指针被发明了出来。智能指针,简单来说就是通过引用计数法记录一个对象被...

2020-03-19 18:40:02 552

原创 Java程序main方法执行流程

Java程序main方法执行流程当我们编写完java源代码程序后,经过javac编译后,执行java命令执行这个程序时,是怎么一步步的调用到我们程序中的main方法的呢?今天通过查看OpenJdk的源码来揭开它的神秘面纱。java命令是在安装jre/jdk时配置到系统环境路径中去的,执行java命令时会找到bin目录下的java可执行程序,并将我们编译后的java程序类名传递进去就可以执行了。...

2019-12-06 18:42:40 5469

翻译 HotSpot虚拟机术语表

HotSpot Glossary of TermsA work in progress, especially as the HotSpot VM evolves. But a place to put definitions of things so we only have to define them once. There are empty entries (marked TBD fo...

2019-11-27 11:15:16 255

原创 Dart中的Isolate

Dart中的IsolateDart语言,是Google在2011年推出的Web开发语言,由Chrome浏览器V8引擎团队的Lars Bak主持,目的是要取代JavaScript称为下一代结构化Web开发语言。不过由于NodeJs在兴起,让JavaScript拥有了服务端开发能力,慢慢使Dart淡出了开发者的视野。随着Flutter跨平台开发框架的流行,其使用的开发语言Dart也再次焕发活力。那...

2019-11-05 12:30:39 12504

原创 Flutter中的测试

一个经过良好测试的应用,应用有许多单元测试和widget测试,并使用代码覆盖率功能来追踪。再加上对所有主要使用场景足够多的集成测试。Flutter中将测试分成三类:单元测试Widget测试集成测试下面分别简单介绍如何编写这个三种测试用例。单元测试添加依赖dev_dependencies: flutter_test: sdk: flutter普通逻辑测试import...

2019-09-25 18:30:20 1872

原创 Flutter中的序列化

在项目开发时,我们需要将外部(网络、数据库等)读取到的数据映射成模型类,或者将数据模型类序列化成可传输或存储的格式,这个格式一般是Json或Xml。下面就以Json格式的序列化和反序列化为例,看看在Flutter中该如何做。两种方式小项目里用手动序列化方式中大型项目使用代码生成方式Flutter没有类似于GSON、Jackson、Moshi的类库,因为Flutter不支持反射。手动序...

2019-09-25 18:25:31 1411

原创 一张图理解Flutter中Dart与原生环境通信

一张图理解Flutter中Dart与原生环境通信Flutter中提供了Dart与原生环境通信的机制Platform Channels。通过该机制可以扩展Flutter,实现调用原生系统Api的能力。官方介绍图如下:[外链图片转存失败(img-oseSHSo7-1567675716216)(https://flutter.dev/images/PlatformChannels.png)]那么F...

2019-09-05 17:31:21 2324

原创 跨平台开发实践之Flutter

跨平台开发实践之Flutter先说点废话。今天的主题关于跨平台开发技术的。跨平台开发大家应该都了解,无非就是写一套代码可以运行在两个甚至多个平台之上,而对于我们客户端/前端开发来说,跨平台一般就是跨现在主流的Android和iOS两个移动端平台,再牛逼一点的可以加上Web浏览器。目前业内也有很多跨平台解决方案,例如Hybird、ReactNative、微信小程序、阿里的Weex、微软的Cord...

2019-08-23 20:18:44 2790 1

翻译 Flutter 项目打包发布

Flutter 项目打包发布Android流程替换应用Icon和应用名称在/android/app/src/main/res 目录下,替换ic_launcher.png为正式的项目图标。在/android/app/src/main/AndroidManifest.xml文件中,修改Application标签下android:label的值的应用名称生成签名文件并添加签名配置创建签名文件...

2019-07-03 19:37:25 6095

原创 Python3 urllib Post请求

Python3 urllib Post请求自己练手的一个小项目,使用Python3中自带的网络库urllib,发送post请求,请求参数为json字符串。url = 'http://xxxx.com'params = { a:'1', b:'2'}params = json.dumps(params)headers = {'Accept-Charset': 'utf-...

2019-06-28 11:57:35 22264 4

原创 Android Gradle 使用Zip任务打包

Android Gradle 使用Zip任务打包背景:在一个项目中包含两个Module:一个主Module,一个库Module。主Module为库Module的调用示例。为了将主Module源码单独打包分发给外部用户,并且要保持项目结构不变且可直接运行,所以需要自定义一个打包任务来完成。需要打包的文件:rootDir/app/rootDir/build.gradlerootDir/set...

2019-05-14 10:39:16 3025 3

原创 在Android中PX、DP(DIP)、SP、DPI、PPI的区别

在Android中PX、DP(DIP)、SP、DPI、PPI的区别先说比较简单的,PX、DP(DIP)和SP。PX的全称是Pixel,翻译过来是”像素“的意思,Pixel是由Picture和Element两个单词合并而来的,也就是图像的元素之意。比较准确的定义是:像素是指由一个数字序列表示的图像中的一个最小单位。一个数字图像就是一系列像素的集合,每个像素可以由各自的颜色值和具体的位置,通过...

2019-03-25 10:16:25 1532

翻译 Flutter与Android中的对应

Flutter与Android中的对应View相关Flutter使用的是声明式UI,而Win32、Android或iOS框架中使用的是命令式UI,具体差异为:命令式UI需要开发者手动构建和控制一个UI控件的所有功能,然后在需要变更UI时,使用方法和设置器修改。而声明式UI只需要明确一个UI控件的当前状态即可,剩下的UI变换交给框架完成。举个例子:ViewB下包含的两个ViewC(c1和c...

2018-12-22 17:47:20 4155 2

原创 浅谈Http

浅谈Http简介Http(HyperText transfer protocol 超文本传输协议),是一种用于分布式、协作式和超媒体信息系统的应用层协议。超文本Tim Berners-Lee 在1989年发明Http的时候,就是为传输HTML文档的,而HTML最初就是带有超链接的文本文件,所以叫做超文本。后面又慢慢发展支持了更多的文件类型,如音视频、图片等。传输协议虽然Http名字中带...

2018-12-04 18:08:46 607 1

原创 上传Android库到JCenter

上传Android库到JCenter申请账号到Bintray这网站上申请一个账号,并获取到账号和秘钥。Bintray网站负责托管我们上传的jar包或aar包及版本信息。Bintray是JCenter源码库的托管网站,除了可以通过Bintray将依赖库文件发布到JCenter,还可以创建自己的Maven仓库。由于Maven对开发者不太友好,上传依赖库异常困难,所以Android Studio...

2018-11-28 15:40:50 413

原创 TCP和TLS/SSL会话细节

TCP和TLS/SSL会话细节TCP数据段格式说明TCP建立连接和断开连接细节Https如何保证通信安全一次Https网络请求通信细节网络数据包分析工具wireshark的使用问题:SYN、ACK、FIN具体含义是什么?TCP建立连接超时的表现?为什么需要证书来下发服务端公钥?客户端是如何验证证书合法性的?对称秘钥是如何协商出来的?为什么不直接让客户端自己生成一个秘钥发...

2018-10-08 15:05:07 15748 2

原创 关于OkHttp3中publicsuffixes.gz的使用

关于OkHttp3中publicsuffixes.gz的使用publicsuffixes.gz中是一个压缩的文本文件,里面包含了目前公开的“公共后缀列表”。 关于“公共后缀列表”的解释如下:、“公共后缀”是指互联网用户可以(或历史上可以)直接注册名称的公共后缀。一些公共后缀的例子是.COM, .co.uk 和 pvt.k12.ma.us。公共后缀列表是所有已知公共后缀的列表。公共后缀...

2018-09-03 10:17:14 11452

原创 OkHttp 之 网络请求耗时统计

OkHttp 之 网络请求耗时统计OkHttp 3.11.0版本提供了EventListener接口,可以让调用者接收一系列网络请求过程中的事件,例如DNS解析、TSL/SSL连接、Response接收等。通过继承此接口,调用者可以监视整个应用中网络请求次数、流量大小、耗时情况。 使用方法如下: public class HttpEventListener extends Event...

2018-08-27 16:53:31 14663 7

原创 关于面向Android7.0及以上系统的应用无法通过charles抓包

关于面向Android7.0及以上系统的应用无法通过charles抓包默认情况下,来自所有应用的安全连接(使用TLS和HTTPS之类的协议)均信任预装的系统CA,而面向6.0及以下系统版本的应用默认情况下还会信任用户添加的CA证书。如果我们将targetSdkVersion修改到24以上的时候,应用则不会信任用户安装的证书了。详细说明见官方文档。这时,当我们通过charles或其他抓包...

2018-08-01 20:34:41 6471

原创 Android中线程间通信机制Handler疑问解答

Android中线程间通信机制Handler疑问解答说起Handler的使用,几乎是开发者入门必备的开发技能。而且都会知道Handler配合一个Looper和MessageQueue来实现消息的创建、分发、处理。每一个Handler会绑定到创建它的线程以及一个消息队列。通过Handler,我们可以跟其他线程发消息实现线程切换,也可以给当前线程Handler发消息实现定时任务。...

2018-06-22 21:51:21 848

linux 企业应用论文

liunx企业应用选修课的结课论文,欢迎大家来下载

2012-05-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除