自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

little little

explore new world

  • 博客(30)
  • 收藏
  • 关注

原创 对投屏实现的调研

1 网易云1 seek到最后没有没有播放下一集?XXX上seek到最后,stopPlayer退出播放器,发送STOPPED事件给手机,手机播放下一首歌,给XXX发送新的URI确定问题:XXX状态是否正确,设置为stop,set dlna status:stopped订阅是否正常发送STOPPED消息给订阅者,也就是给手机。notify消息是否正确。2 腾讯app投屏时不会发送subscribe订阅XXX的消息当XXX的play状态变化playing pause stop时无法发notify

2021-06-23 16:30:30 548

原创 应用开发点滴记录

1、将依赖的jar和解码相关API调用逻辑编译成dex文件放到后台,而把R.class打成aar放到本地,在调用功能时设置资源文件dexClassLoader加载fragment的实例,给fragment设置资源文件,再显示。2、创建一个空的notification,拿到布局文件ViewGroup,遍历获取最大字体和最小字体的TextTextView,作为标题和内容的色值。ViewGroup的获取:获取Notification的remoteViews的id,inflate这个id得到根布局ViewGr

2021-06-23 16:11:46 129

原创 命令备忘录

1 获取调试日志:输入adb logcat -v time | tee log.txt创建log文件用来保存日志,操作完后ctrl+c停止输入gedit log.txt 打开log文件nautilus . 打开当前的目录windows获取调试日志:adb shell logcat -v threadtime > log.txt2 网络数据tcpdump:adb shell tcpdump -i wlan0 -s 0 -w /data/1.pcap 开始抓包,将抓包内容保存在/data目

2021-06-23 16:09:53 229

原创 通过注解结构化代码

原理是反射,获取类的所有方法,匹配调用的方法名字,调用方法。public class CommandExecutor { // 注解声明 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Command { } public class InvocationException extends Exception { priva

2021-06-23 15:30:02 112

原创 通过gradle管理项目的一种方式

解决一种需求,主要是解决不同目录结构编译问题:一个工程A下有1,2,3,4四个module,在A下又放了B工程,现在B要依赖module1,不改变当前的目录结构,怎么实现?https://stackoverflow.com/questions/24975745/gradle-dependencies-compile-project-by-relative-pathYou can include an outside root project module using ‘settings.gradle’

2021-06-23 15:27:28 145

原创 设备发现过程分析

总体而言,SSDP协议规定了两种发现设备的途径:第一种途径,控制端发送搜索设备消息,并监听响应消息;第二种途径,控制端监听设备的宣告消息。这两种只要有一种途径成功,就实现了设备发现。抓包分析以腾讯App发现XXX为例分析,假设两台设备加入局域网络后,手机获取了IP地址192.168.1.102,而XXX获取了IP地址192.168.1.112。手机发送搜索设备消息,并监听响应消息图1的tcpdump请求过程是192.168.1.102发现192.168.1.112,即手机发现XXX的过程.

2021-06-23 14:55:24 1485

原创 单例模式总结

双重检验锁public class Singleton { private volatile static Singleton instance; //声明成 volatile private Singleton (){}//private防止被外部类创建实例 public static Singleton getSingleton() { if (instance == null) { s

2021-06-23 13:43:10 67

原创 Java内存分配总结

寄存器最快的存储区,数量有限,不能直接控制。堆栈通过堆栈指针可以从处理器那里获得直接支持。堆栈指针若向下移动,则分配那些内存;若向上移动,则释放那些内存。创建程序时,Java系统必须要知道存储在堆栈内所有项的确切生命周期,以便上下移动堆栈指针。仅存放对象的引用,不存放Java对象。堆存放所有的Java对象,不需要知道存储的数据在堆里存活多上时间。当执行创建对象的代码时,会自动在堆里进行存储分配。用堆进行分配和清理可能比用堆栈进行存储分配需要更多的时间。常量存储常量在程序代码内部。非RAM存储

2021-06-23 13:33:01 92

原创 Handler使用总结

A Handler allows you to send and process Message and Runnable objects associated with a thread’s MessageQueue. Each Handler instance is associated with a single thread and that thread’s message queue. When you create a new Handler, it is bound to the threa

2021-06-21 18:23:55 187

原创 根据宽高缩放加载图片

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight){ BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; //加载图片 BitmapFactor

2021-06-21 16:14:32 102

原创 引入第三方库引起的android.dex.DexIndexOverflowException

在Android项目中引入过多的jar会出现错误:android.dex.DexIndexOverflowException: Cannot merge new index xxxx into a non-jumbo instruction!这个错误出现的原因是 Android设定的方法数是65536个(DEX 64K problem),超过这个方法数,导致dex无法生成,就无法生成APK.限制原因:早期的Dalvik VM内部使用short类型变量来标识方法的id,就有了 最大方法数的限制65536

2021-06-21 16:09:46 110

原创 GreenDAO操作数据库总结

自定升级逻辑GreenDao有做一个DevOpenHelper来处理创建和升级数据库的逻辑,但在升级里的处理是删除table重新创建,导致数据库已存在的用户数据丢失。参考DevOpenHelper的实现自定义DownloadDBHelper,自定义升级逻辑。在android数据库模块,新增的列可以通过alter语句做到,但要删除一列时通过drop却不行。现在是通过整张表的复制实现的,先创建一张和当前的表一样的临时表,数据都在临时表中,将当前的表删除,创建一张新的表(当前我们期望的表),将数据从临时表

2021-06-21 15:10:11 229

原创 多进程WebView页面空白问题排查

背景打开网页显示空白,怀疑webview的设置有问题,webview的设置settings,webviewclient,webviewchromeclient实验1 在使用webview实例loadurl的地方,尝试设置一个新创建的webviewclient,实现空的回调,发现可正常打开网页。2 定位到自定义的webviewclient有问题3 排查回调,从onPageStart开始4 定位到onPageStart有问题。排查onPageStart的实现。5 发现跟JS注入有关 夜间模式 和

2021-06-21 14:52:16 797

原创 App耗电量分析总结

工具1、官方historian地址:https://developer.android.com/studio/profile/battery-historian-charts.html2、腾讯的GT地址:http://gt.tencent.com/3、腾讯的PowerStat地址:http://gt.tencent.com/4、chrome调试用法:数据线连接手机,在地址栏输入chrome:inspect5、Android Device MonitorAndroid studio的工具

2021-06-21 14:42:31 1781

原创 Android App调用NativeService的一种实现方式

Android App调用Native服务的一种实现方式背景Native层运行服务进程,通过协议与remote通信,交换数据。App使用Native服务暴露的接口,发送和接收数据。应用层服务和Native层服务的区别:新的改变...

2021-01-05 11:52:00 1122

原创 Http协议基础

Http的缓存机制:根据是重新向服务器发起请求分为强制缓存和对比缓存强制缓存由Expire和Cache-Control控制Expire是响应Header中的一个字段,表示到期时间。请求时间小于到期时间,直接使用缓存;否则需要向服务器重新发起请求。Http1.0中的字段,在Http1.1以后被Cache-Control字段取代。Cache-Control也是响应Header中的一个字段,根据取值具有不同的含义:valuecommentprivate客户端可以缓存pub.

2020-12-16 13:16:16 128

原创 ListView

索引:当前可见条目的下标位置:光标上条目的下标定义一个垂直滚动的视图集合,列表中的每个视图紧挨着前一个视图。为了更加流行和高效的展示一个列表,使用RecyclerView。要展示一个列表,可以在布局配置文件引入一个列表view:<ListView * android:id="@+id/list_view" * android:layout_width="match_parent" * android:layout_height="match_parent"

2020-11-27 17:34:12 72

原创 HashMap

实现了Map接口的Hash表。这个实现提供了所有的Map操作,并且允许null值和null键。HashMap可以粗略的视为HashTable,区别是HashMap是非同步的,并且允许null。这个类不保证Map的排序,特别的,不保证顺序一直保持固定的顺序。这个实现可以为get/put基本操作提供常量时间性能,假设哈希函数把元素在buckets中合理的分散。集合视图的迭代时间与HashMap实例的容量(buckets数量)加上它的大小(key-value数量)成正比,因此,如果迭代的性能很重要就不要初始化设

2020-11-26 14:25:37 95

原创 状态机

定义了一套分层处理消息的状态机,具有按层次排列的状态。State对象必须实现processMessage方法,可以按需实现enter/exit/getName。enter/exit方法可等价于面向对象编码中的构造和销毁,会用做状态的初始化和回收。getName方法返回了状态的名称,方法的默认实现返回的是类的名称。让getName方法返回状态实例的名称可能更满足要求,特别是在一个状态类中有多个状态实例。当一个状态记被创建,addState方法用来建造这个层次,setInitialState方法识别这些状态

2020-11-25 14:24:23 380

原创 线程

线程JVM允许一个应用有多个线程同时运行线程有优先级,高优先级线程比低优先级线程优先被执行。线程可以标记成daemon。在线程里创建一个新的线程,这个新线程的初始优先级等于创建线程的优先级。当创建线程是daemon线程时,新线程就是daemon线程。JVM启动时,通常有一个非daemon线程,有些地方成为main。JVM不停的执行线程,遇到下面情况之一停止:1 Runtime的exit方法被调用了,并且安全管理允许exit操作发生。2 所有的非daemon线程已经死了,即run执行结束或者在run

2020-11-24 14:17:48 83

原创 Framework-SystemUI-Keyguard

锁屏的状态电源管理事件,影响到锁屏显示或者重置手机窗口管理员回调,锁屏显示的时候,用这个回调通知手机窗口管理员锁屏显示了锁屏视图自己的事件,追踪锁屏成功解锁的状态当屏幕暗下去的时候,锁屏视图显示,这么设计的目的是当屏幕变亮时,锁屏立刻准备好了。例子:运动,按键是否应该唤醒锁屏锁屏是否显示?输入事件是否收锁屏状态的限制外部事件转换为锁屏视图变化:关闭屏幕:重置锁屏,显示锁屏(为下一次屏幕打开准备)键盘滑开:如果屏锁不安全,隐藏屏锁锁屏视图的事件:用户成功解锁锁屏:隐藏锁屏,不再限制输

2020-11-18 15:22:25 161

原创 SystemUI

SystemUI包含的的component:frameworks/base/packages/SystemUI/res/values/config.xml<string-array name="config_systemUIServiceComponents" translatable="false"> <item>com.android.systemui.Dependency</item> <item>com.androi

2020-11-10 10:20:50 81

原创 以MediaServicve为例的Binder

https://www.cnblogs.com/innost/archive/2011/01/09/1931456.html

2020-10-23 09:55:24 138

原创 Android App启动时间

1 启动方式cold startupwarm startuphot startup2 cold startup过程system tasks:在后台加载和launch app当后台launch app结束后立刻在前台屏幕上显示出一个空白window后台创建app进程app process tasks:创建app对象launch主线程(UI线程)创建MainActivityinflate views在屏幕上布局在屏幕上绘制绘制完成后,后台使用这个MainActivity替换屏幕上

2020-09-10 18:59:54 407

原创 Android native使用gRPC通信的一种实现方式

原文系统:ubuntu 16.04源码下载在github下载gRPC项目,然后更新子模块:git clone https://github.com/grpc/grpc.gitgit submodule update --init安装依赖sudo apt-get install pkg-configsudo apt-get install autoconf automake libtool make g++ unzipsudo apt-get install libgflags-dev li

2020-05-09 10:16:46 736

原创 shell脚本ssh带密码登录

sshpass使用UbuntuMACWindowsUbuntu安装:sudo apt-get install sshpass使用:sshpass -p “xxx” ssh user@ip好处:写到shell脚本,快速登录远程机器,不用copy密码了。MACWindows...

2020-05-08 11:20:19 2848

转载 Android Binder设计与实现 - 设计篇

转载 摘要 Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,...

2020-03-12 17:04:00 161

原创 使用Uid的2个场景案例

参考文章背景在Service组件开发中,对外暴露了aidl接口。为了知道是什么app在请求服务,即Client是谁,就想将Client的package name收集起来。UID含义android中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这...

2020-03-12 11:24:36 604

原创 投屏之概述

投屏之概述随着通信技术、网络技术、以及电视技术的发展,越来越多的企业做起了投屏业务。到目前为止,爱奇艺上市了电视果,阿里上市了天猫魔头,有确切消息腾讯正在研发,说明投屏业务给企业将带来一定的利益。不同于IPTV,即电视机顶盒,投屏是一个全新的业务,因为它只是一个技术手段,不会涉及媒体内容。投屏的意义投屏就是将某一个屏幕的内容,通常是画面和声音,投射到另一个屏幕上。其意义有:一、共享内容,如将...

2019-09-21 22:02:48 2161

原创 Ubuntu18.04编译android9.0实践

欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体...

2019-09-21 21:51:20 6266

空空如也

空空如也

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

TA关注的人

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