自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

努力的八戒

左手代码,右手艺术

  • 博客(156)
  • 资源 (23)
  • 收藏
  • 关注

原创 Scheduling restart of crashed service解决方案与源码分析

测试发现一个bug,service中某个方法由于空指针导致程序挂掉,接着触发程序的保活机制触发程序重启,但是这个异常service先启动访问未初始化资源导致程序连续循环重启,log中打印一个信息很关键。ActivityManager: Scheduling restart of crashed service com.shan.mvvm/.MyService in 1000ms for start-requested系统按照程序启动时要求重新启动了service。这就要提到Service的onStar

2021-07-17 10:30:43 51 1

原创 子线程Looper.loop之后

android规定不允许子线程更新UI,在ViewRootImpl 类中很多操作UI的方法都会调用checkThread()方法检查线程,如果当前线程与创建ViewRootImpl (mThread )的线程不一致就会报“Only the original thread that created a view hierarchy can touch its views”//ViewRootImpl.javavoid checkThread() { if (mThread != Thread.cu

2021-07-05 21:11:14 19 2

原创 电脑无法通过USB方式访问手机存储

本人电脑是win10系统,偶尔将安卓手机连接到电脑,USB用途选择“文件传输"或者连接方式选择“媒体设备(MTP)”之后,发现电脑无法显示手机图标,而且找不到盘符或移动盘的标志,通过驱动精灵、驱动人生等软件没解决问题,网上搜索了一下找到了解决方案,解决步骤如下:电脑->右键->管理->设备管理器,可以看到便携设备一列的下面MTP前面有个黄色感叹号。...

2021-06-23 21:12:38 24

原创 面向切面编程:aspectJ在Android中的使用

一、 简介和使用场景aspectJ(https://www.eclipse.org/aspectj/)是eclipse社区中的一个开源工具,可以对java编程语言面向切面进行无缝拓展、完全兼容java语言,它可以对关注切点进行优雅处理,比如错误检查与处理、性能优化、监视与日志记录等场景。说到面向切面编程,大家可能会联想到著名的Spring AOP,Spring AOP是基于动态代理模式实现的。代理模式分为静态代理和动态代理,静态代理在编译期修改代码将指定对象注入到代码中,拓展性差、耦合性强;动态代理在运

2021-06-19 17:38:04 33 5

原创 ThreadLocal和InheritableThreadLocal

一、引子最近在研究fps帧率时候了解到可以通过Choreographer刷新帧率的方法来统计界面刷新帧率,在当前应用确实可以,但是却不能监测其他app(比如QQ、微信、酷我音乐),为什么呢?难道说Choreographer不是全局变量。...

2021-06-12 18:28:49 1028 4

原创 apk的打包和优化

一、打包过程与工具借用下Android 打包流程一文画的apk打包流程图。

2021-06-04 20:07:31 24 1

原创 Android路由

一、模块化和组件化Android开发中,随着功能的不断增加,整个项目越来约庞大,导致代码结构混乱,修改繁琐,管理困难,android模块化开发的思想应运而生。模块化主要时为了解耦,将功能以模块的形式进行封装,模块间通过接口调用形进行通信,不同功能可以由不同的开发人员去开发、维护,每个开发人员只需关注自己负责的模块即可。 简单的模块化开发只需将不同的模块代码放在不同的文家夹路径下即可区分,但是复杂的项目或者便于独立依赖引用的需要可能需要将不同的模块功能放置在不同的library中,此时依赖和接触依赖只需在

2021-06-01 21:21:57 1307 11

原创 手动实现bindview

以前android开发中用到过xUtils3和butterknife框架来动态注册控件id,节省繁琐的findViewById操作,今天就来试着自己写一个findViewById操作包装库。首先需要知道xUtils3和butterknife使用注解在编译时自动生成模板代码来实现的,那么就需要注解,注解之前在《注解》一文中有介绍; 同时为了方便生成java文件可以使用javapoet,javapoet是由squareup公司开源的java代码生成器,可以去github上查看详细文档。1、总览总的工

2021-05-21 20:04:13 86 2

原创 Project Butter与invalidate

一、Project Buttergoogle希望摆脱android UI交互方面的滞后、卡顿问题,在android4.1提出了Project Butter,力争UI如黄油般丝滑。为了确保一致的帧速率,Android 4.1 将Vsync 计时扩展到了所有由 Android 框架完成的绘图和动画中。包括应用渲染、轻触事件、画面构成和显示刷新在内的一切操作均按照 16 毫秒的 Vsync 检测信号同步运行,因此帧不会提前或延迟。Android 4.1 还在图形管道中添加了三重缓冲,以实现更加一致的.

2021-05-12 21:20:25 35 5

原创 anr原因二:BroadcastQueue

本文基于android9.0源码分析。android出现经常与四大组件有紧密联系,主要有四种情况1、activity界面输入事件超时 2、broadcastReceiver发送以及接收事件超时 3、service处理事务超时 4、contentProvider处理事务超时。在上一篇文章《anr原因一:inputDispatcher》中对输入事件的anr源码进行了分析,本文则对broadcastReceiver产生的anr进行分析。一、发送广播先从发送广播说起吧,执行sendBroad

2021-04-29 17:53:35 50 1

原创 anr原因一:inputDispatcher

android出现经常与四大组件有紧密联系,主要有四种情况1、activity界面输入事件超时 2、broadcastReceiver发送以及接收事件超时 3、service处理事务超时 4、contentProvider处理事务超时。先透露一下,anr弹框最终会调用ProcessRecord的appNotResponding方法,搜索源码发现有四个地方调用了ProcessRecord.appNotResponding方法,这也验证了上面的说法。本文只分析activity相关的inputDisp

2021-04-23 15:49:18 106 1

原创 AccessibilityService事件输入源码

android底层Input事件传递流程一文从源码角度介绍了android底层输入事件的来源与分发,那么本文就专门介绍下无障碍服务的来源与分发。本文基于android9.0源码进行分析,从AccessibilityService绑定到系统服务以及系统服务发送事件消息给AccessibilityService两个过程来分析。1、服务绑定在无障碍服务和悬浮框一文中介绍了应用层实现无障碍服务的一个例子。我们知道应用层要实现无障碍服务首先要创建一个AccessibilityService的子类,并在这个子类

2021-04-21 19:42:37 52 1

原创 android底层Input事件传递流程

在android事件分发机制一文中介绍了Touch事件的分发,那么Touch事件从哪里来的呢?本文基于android9源码进行分析。一、IMS首先,触摸事件肯定需要驱动去接收,android是在/dev/input节点获取事件。由于WindowManagerService.java(后面简称WMS)负责界面窗口的管理,既然是屏幕事件那么肯定和WMS有关了,WMS是在SystemServer.java的startOtherServices方法中启动的,WMS的构造参数有InputManagerSe

2021-04-16 15:22:35 66 1

原创 ERROR:STATUS_BROM_CMD_SEND_DA_FALL(0xC0060003)

昨天使用mtk工具SP_Flash_Tool_exe_Windows_v5.2052.00.000刷机失败,提示ERROR:STATUS_BROM_CMD_SEND_DA_FALL(0xC0060003)。上网搜了下,有如下回答1、手机驱动安装不完全我电脑安装驱动精灵和驱动人生扫描驱动,但是并不需要更新,所以不是驱动问题2、windows10电脑不兼容,我的异地同事也是windows10电脑并且使用的是相同版本的SP_Flash_Tool工具,他却可以,所以也不是版本的问题3

2021-04-08 19:40:48 474

原创 RxJava(被)观察者创建与线程调度

本文使用rxjava2版本进行讲解:implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'implementation 'io.reactivex.rxjava2:rxjava:2.1.8'0、 代码实例//被观察者Observable observable= Observable.create(new ObservableOnSubscribe<String>() { @Override public v

2021-04-03 18:06:18 50

原创 okhttp执行与拦截器

本文使用okhttp3源码来讲解1、同步和异步的区别(1)同步方法execute()okHttpBuilder.build().newCall()会创建一个RealCall对象//OkHttpClient.java@Override public Call newCall(Request request) { return RealCall.newRealCall(this, request, false /* for web socket */);}然后看下RealCall的

2021-03-18 20:49:00 39 1

原创 Window相关

1、ViewRootImpl的数量android中Window.java的唯一实现类是PhoneWindow.java,WindowManager.java的实现类是WindowManagerImpl.java,WindowManagerImpl.java中的WindowManagerGlobal用于具体操作View。WindowManagerGlobal.java添加View时会调用ViewRootImpl的setView(view, wparams, panelParentView, userId)

2021-03-15 20:59:27 25

原创 Synchronized锁升级

jdk1.5以及以前的版本Synchronized锁的堵塞和唤醒需要用户态和内核态的切换,比较消耗CPU资源,属于重量级锁以及悲观锁的范畴。从jdk1.6开始,Synchronized锁有了一定的优化,偏向锁和轻量级锁是乐观锁,重量级锁才是悲观锁。偏向锁对象锁会偏向于第一个获得它的线程,考虑到大部分情况是无锁状态,一个线程获取到了某个对象的访问,那么下次大概率还是可以获取到这个对象的访问的,那么此时就不需要加锁,不需要进行同步操作。一个线程获取到只需要在对象的Mark Word上加个01(偏向模

2021-03-15 10:34:04 23

原创 jdk Thread状态与生产者消费者模型

public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may ...

2021-03-01 17:43:06 32

原创 kotlin中单例类与静态方法

kotlin中内部类和单例类用object修饰,java代码如下:class Demo { private static class SingletonHolder { private static Demo instance = new Demo(); }}转化为kotlin代码如下:internal class Demo { private object SingletonHolder { private val instan

2021-02-22 19:49:13 130 1

原创 Smart cast to ‘TextView!‘ is impossible, because ‘txt‘ is a mutable property

初学kotlin后写了个android demo,但是TextView类型变量txt却提示Smart cast to 'TextView!' is impossible, because 'txt' is a mutable propertythat could have been changed by this time.private var txt: TextView?=nulltxt=findViewById(R.id.txt)txt.setOnClickListener { Toast.

2021-02-13 15:14:53 260

原创 无障碍服务和悬浮框

一、无障碍服务开启AccessibilityService是一个抽象类,应用需要创建Service来继承AccessibilityService并实现抽象方法。1、创建HongBaoService.java2、AndroidManifest.xml中声明并配置<service android:name="com.yhao.floatwindow.HongBaoService" android:enabled="true" android:exported=

2021-02-05 08:55:26 196 8

原创 git pull

git pull的默认行为是git fetch + git mergegit pull --rebase则是git fetch + git rebase.git fetch 从远程获取最新版本到本地,不会自动合并分支1、git pull和git pull --rebase提交后分支区别假设共同基线是commit-D,从D分出了master分支和topic分支 A---B---C topic / D---E---F---G master(1)git pull

2021-01-23 15:16:43 29

原创 git revert

git revert [--[no-]edit] [-n] [-m parent-number] [-s] [-S[<keyid>]] <commit>…​git revert --continuegit revert --quitgit revert --abortgit-revert - 反做版本库中已经存在的提交记录,默认情况下反做某条记录后会产生一条新的记录。通过-n参数可以避免再次产生一条提交记录-m指定回滚的父节点(当回滚.

2021-01-15 17:23:42 225 2

原创 数据双向绑定:DataBinding VS Livedata+ViewModel

一、DataBindingDataBinding是选择一个可以修改的控件,比如EditText、CheckBox等,对比单向绑定,需要多一个=符号,并且变量模型使用ObservableField,就能保证View层和ViewModel层的状态同步了。BaseObservable 单向绑定,在中间又要写注解,又要加注解,然后还得用notifyPropertyChanged();和notifyChange();进行刷新。这样整体下来是比较麻烦的,所以,可以用ObservableField...

2020-12-26 19:06:47 1069 1

原创 android studio Live Templates

android studio中有一些模板可以加快开发者的开发效率,比如下面android自带的模板,输入const就会提示常量定义模板,具体内容在Templates text中展示,还有fbc,foreach等,可能大家平时没注意。当然,开发者也可以自定义模板。1、位置通过Settings ->Editor -> Live Templates可以进入模板展示界面2、创建模板组既然是自己自定义模板,那就创建一个模板组吧,方面后续创建多个模板3、创建模板模板组

2020-11-07 17:45:21 41

原创 FileProvider安装应用

一、权限相关1、“未知来源”应用ndroid8.0及其以上系统,为了申请“未知来源”,需要在清单文件添加权限<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>然后代码中动态申请public void setInstallPermission(){ boolean haveInstallPermission; if(Build.VERSION.SDK_INT

2020-10-30 20:38:01 374

原创 C++类的前向声明

前向声明和#include类似,但是#include会增加编译时间,而且#include文件中可能有很多用不到的功能模块。1、对于未定义的类,使用前要先前向声明,前向声明后只能使用对象指针以及对象引用,不能直接使用对象,更不能访问对象细节#include<stdio.h>//class B;//注释掉前置声明会报错class A{public : void func_A(B &b); void printA(){ printf("pri

2020-10-01 17:07:58 222

原创 mysql踩坑以及jdk不同版本切换

1、mysql配置电脑右键->属性->高级系统设置->高级->环境变量->系统变量,编辑path变量添加mysql bin文件目录,比如本人的是D:\Program Files (x86)\MySQL\MySQL Server 5.0\bin2、cmd命令net start mysql启动3、mysql -u root -p 登陆报错ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost'开始按钮

2020-10-01 10:50:02 120

原创 C++面向继承时构造函数初始化

1、参数初始化C++派生类不能继承基类的构造函数,对于派生类新增成员,派生类自定义构造函数初始化;对于继承来的成员,调用基类构造函数进行初始化。当基类没有默认构造函数时,派生类构造函数需要给基类构造函数传递参数,形如下面格式,具体可以参考virtual实现C++运行时多态一文中的实例:派生类名::派生类名(基类所需形参,本类成员所需形参):基类名(参数表),本类成员初始化列表{//其他初始化}多继承时构造函数定义如下:派生类名::派生类名(参数表):基类名1(基类1初始化参数表),

2020-09-26 10:49:31 211

原创 operator重载运算符

C++已经为基本类型和标注库中的数据类型提供了运算符操作,我们自定义数据类型的话有时就需要重载运算符实现自定义函数来实现类似功能了,此时可以把operator ==、operator=、operator*等操作符整体看作一个函数名。一、单目运算符++/--(以++为例)1、重载为类的成员函数假设obj表示对象,func为成员函数,那么func的前置重载形式 func obj 相当于 obj.operator func(),无形参。前置++运算符表示先自增1然后返回对象本身,那么针对前置++就是+

2020-09-25 09:07:41 218

原创 virtual实现C++运行时多态

#include<stdio.h>class Shape{public: Shape(int width,int height):mWidth(width),mHeight(height){ printf("shape constructor\n"); } long getArea(){ printf("shape getArea,width=%d,height=%d\n",mWidth,mHeight); retur.

2020-09-22 14:48:33 68

原创 const与指针

判断哪个被const了的标志是const在*的前面还是后面1、所指是const表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)int i=3,j=6;const int*p=&i; //non-const pointer,const data*p=26;//ERROR!(*p) 是consti=26;//OKp=&j; //OK2、指针是const表示一旦得到了某个变量的地址,不能再指向其他变量int i=3,j=6;int*

2020-09-04 20:16:21 44

原创 C++构造函数

1、复制构造函数如果代码中没有为某个类定义复制构造函数,那么编译器就会隐式声明一个拷贝构造函数。比如下面的constructor.cpp中的Point类,我并没有创建Point(Point& p)形式的构造函数,但是Point b(a)却可以成功。#include <stdio.h>#include <string>using std::string;class Point{public: Point(int x_value,int& y

2020-09-03 20:39:40 51

原创 ubuntu14.04虚拟机踩坑

1、打开vim编辑器,点击上下左右键却输出字符系统自带vim功能不全,卸载后安装完整vimsudo apt-get remove vim-commonsudo apt-get install vim-gtk2、windows下xshell无法连接访问virtualbox中ubuntu14.04可以参考https://www.cnblogs.com/felixwang2/p/9441925.html配置如果重启虚拟机后ubuntu连不上网络,并且ifconfig只显示本地环回,if..

2020-08-31 19:02:55 92

原创 C/C++函数传值、传指针、传引用

1、函数参数传值,函数执行结束后实参本身的值并没有变化#include <stdio.h>void swap(int a,int b){ int temp=a; a=b; b=temp;}int main(){ int a=3,b=5; printf("before swap,a=%d,b=%d\n",a,b); swap(a,b); printf("after swap,a=%d,b=%d\n",a,b); retu

2020-08-24 21:55:09 63

原创 linux不同signal含义

android ndk开发中老是会报Fatal signal 6 (SIGABRT)或者signal 11 (SIGSEGV),这些信号有啥含义呢?signal有一个编号、名称、事件、默认处理动作四个要素。可以在linux系统中在命令行中输入kill -l显示signal的编号和名称,也可以在/usr/src/linux-headers-xxx/arch/s390/include/uapi/asm/signal.h查看signal的编号和名称。可以在linux系统中在命令行中输入man 7 s.

2020-08-15 16:32:32 319

原创 C++类型转换

C++主要有const_cast、dynamic_cast、reinterpret_cast、static_cast四种类型转换。1、C++中非常量是可以转化为常量的(给变量赋值可以),但是不允许常量直接转换为非常量const_cast(给常量重新赋值不可以),如果需要给常量重新赋值,那么可以使用const_cast2、子类转换为父类并使用父类中的方法,这毫无争议。但是反之,父类转换为子类并且调用子类的方法是不允许的,如果需要子类的方法可以使用dynamic_cast3、reinterpret_

2020-08-01 13:57:38 77

原创 C++分段拷贝字节

memcpy可以用来拷贝原资源到目标资源的指定长度的数据,但是不能只拷贝中间的一段数据。如果拷贝中间一段的数据,此时可能就需要逐字节拷贝void get_bytes(uint8_t* dst_bytes,uint8_t* source_bytes){ for (int i = 0; i < 4; i++) { for (int j = 0; j < 2; ++j) { *dst_bytes++ = *source_bytes+i*5+j+

2020-07-25 17:34:28 309

原创 ndk获取指定目录下的所有文件名

#include <jni.h>#include <string>#include <android/log.h>#define LOG_TAG "MyCTestLog"#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)#include <iostream>#include <unistd.h>#include <dire.

2020-07-20 10:51:36 146

Camera2Demo2.7z

YUV_420_888是YUV_420的一个大类,android camera2的ImageReader中设置了YUV_420_888后具体返回数据U和V是单独处于不同平面还是相同平面交叉排列要看具体的设备了,一般来说pixelStride=1表示独占一个平面(一般Y平面就只有Y数据),pixelStride=2则表示U和V是交叉排列。 最近工作中发现ImageReader设置了特定尺寸后,实际返回的数据并不是之前设定的尺寸。

2020-08-20

android自定义View之气球碰撞效果

算法步骤: 1、小球数量ballCount,可以设个最大值,在这个阈值内去随机数 2、小球圆心随机坐标(mX,mY)以及半径radius 3、小球在x方向和y方向的随机速度mSpeedX,mSpeedY 4、本次效果小球默认白色,通过alpha设置透明度,实际你们也可以通过随机颜色值达到五彩频繁的小球效果。 5、初始时给每个小球一个初始随机位置(不能超出屏幕)以及初始随机速度。 6、每个一段时间计算一下小球位置并刷新一下界面,当小球到达屏幕边沿则速度设为当前相反数达到反弹的效果。

2018-07-14

Android.mk编译内置无源码apk

有个编译好的第三方apk,合入到系统中,在packages\apps目录创建文件夹wukong,将第三方wukong.apk拷贝到wukong文件夹下,并在wukong文件夹创建Android.mk

2020-08-18

aspectj-1.9.6.jar.7z

aspectj-1.9.6.jar.7z

2021-06-25

android自定义View扫描人脸效果

本文利用SrcIn实现一个人脸扫描的效果,步骤如下: 1、准备两个人脸照片(一明一暗),暗照片作为背景,亮照片作为src前景显示 2、然后通过SrcIn用一个透明矩形框(Dst)与亮照片(src)取交集即可得出一个亮照片的局部区域 3、再给透明矩形一个上下的速度,即可达到扫描的效果

2018-08-04

开发工具jdk1.9第1部分

拓展了javafx.scene.control包,如增加了javafx.scene.control.Alert等类 源文件384M,分为4部分上传,其他部不要资源分额

2017-11-12

framework.jar

android源码编译后生成的./out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar,可以作为android引用库

2018-09-17

mtk系统烧写工具

mtk烧写系统相对于sprd和qcom简单一些,需要准备好系统刷机包 1、双击./SP_Flash_Tool_exe_Windows_v5.1744.00.000/flash_tool.exe打开工具 2、工具主界面的Download-Agent一栏维持默认(.\SP_Flash_Tool_exe_Windows_v5.1744.00.000\MTK_AllInOne_DA.bin),不用手动选择了 3、Scatter-loading File一栏需要你手动选择刷机解压包里的scatter.txt文件 4、下面选择“Firmware Upgrade&quot; 5、手机关机,通过usb连上电脑,点击“Download&quot;开始烧写

2018-06-05

展讯烧写工具

sprd烧写系统相对于qcom简单一些,比mtk稍微复杂,准备好系统刷机包 1、双击.\Bin\ResearchDownload.exe打开工具 2、工具主界面点击左上角第一个按钮“Load packet”选择pac展讯rom包 3、pac包load完成后,点击“Start downloading"按钮 4、手机关机,同时按音量下键和开机键(有些手机是音量上键和开机键)后通过usb连上电脑自动开始烧写

2018-06-06

高通烧写软件

软件太大,存到百度云,附件是下载链接 高通烧写系统最坑,这就需要拼手速啦,准备好系统刷机包 1、软件安装以后,找到安装目录,双击.\Qualcomm\QPST\bin\QFIL.exe打开工具 2、工具主界面Select Build Type有两个选项(Flat Build和Meta Build),在不知道选择哪种烧写类型时先选择Flat Build试试吧,不行再换Meta Build 3、工具主界面Select Programmer选择.elf文件 4、工具主界面点击”LoadXML“选择xml文件,此时”Download"按钮不可以点击 4、手机关机,同时按音量上键、下键和开机键后通过usb连上电脑,此时电脑上会显示手机端口并且”Download"按钮可以点击,点击”Download"按钮后看到下面Status栏开始烧写了,迅速松开音量上键、下键和开机键

2018-06-06

android加载大图

故事要从一场面试说起,当问到如何加载一个大图而不会发生OOM,这里有两种途径,一、降采样大图;二、局部加载大图 由于android内存的限制,andoid系统给每个应用分配的内存是有限的,当直接加载一个占用内存加大的图片时就会发生OOM. 一、降采样大图 主要是利用BitmapFactory.Options对象的inSampleSize参数,根据空间尺寸与大图尺寸的比率来缩小大图,从而显示大图的缩略图。 二、局部加载大图 主要利用BitmapRegionDecoder类的decodeRegion方法来加载局部区域,通过重写View的onTouchEvent方法监听手指滑动事件,更新显示区域。

2018-07-02

OPENGL ES 3.0编程指南 原书第2版 中文版.7z

android OpenGL ES学习必备书籍,从基本到三角形四边形绘制到离屏渲染应有尽有,很适合零基础入门

2019-07-12

python-3.8.3.exe.7z

python安装包,适用于为windows,32位和64位都兼容,

2020-06-15

开发工具jdk1.9第二部分

拓展了javafx.scene.control包,如增加了javafx.scene.control.Alert等类 源文件384M,分为4部分上传,cdsn强制每个资源要2分,操蛋

2017-11-12

开发工具jdk1.9第3部分

拓展了javafx.scene.control包,如增加了javafx.scene.control.Alert等类 源文件384M,分为4部分上传

2017-11-12

Sercie的aidl学习

Sercie的aidl学习

2016-10-11

Handler,Looper和Message

Handler,Looper和Message的理解和练习

2017-08-04

androidqzt_downcc.com.zip

android中设置字体库 Typeface typeFace = Typeface.createFromAsset(this.getAssets(), "fonts/xx.ttf"); textView.setTypeface(typeFace); textView.setText("帅气");

2019-09-18

factory.zip

阅读设计模式之禅以及大话设计模式,写个demo加深印象,可以参考作者文章原 《简单工厂模式、工厂方法模式和抽象工厂模式》https://blog.csdn.net/u013795543/article/details/100173672

2019-08-31

Service基础学习笔记

个人学习笔记,仅供参考

2016-10-10

EventBus demo

实现service和activity之间的消息传递

2016-10-15

开发工具jdk1.9第4部分

拓展了javafx.scene.control包,如增加了javafx.scene.control.Alert等类 源文件384M,分为4部分上传

2017-11-12

ViewPager和Fragment的简单使用

ViewPager和Fragment的简单使用

2016-12-09

空空如也

空空如也

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

TA关注的人 TA的粉丝

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