自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 ObjectOutputStream的结构

成员变量 “serialVersionUID”;没有就用class的hash,跟method有关。成员变量的数量(非static,非transient)不是基本类型,则写入成员变量的类型。成员变量的类型的第一个字符。

2023-03-23 16:03:59 87

原创 android studio的git没有local changes

settings-> version control-> commit-> use non-modal commit interface // 取消这个勾选

2022-02-25 18:04:50 2671

原创 锁屏解锁-KeyguardManager

判断是否锁屏KM.isKeyguardLocked()是否锁屏。不管有没有设置密码KM.isDeviceLocked()手机锁屏,且需要密码才能解锁KM.isKeyguardSecure()如果锁屏,需要密码(比isDeviceSecure 多了个sim锁)才能解锁。此时也可以没锁屏KM.isDeviceSecure()如果锁屏,需要密码才能解锁。此时可以没锁屏。解锁KeyguardManager.KeyguardLock.disableKeyguard()描述:KeygaurdLo

2022-02-11 18:08:50 3425

原创 SharedPreference

原理创建创建sp文件的File对象class ContextImpl { SharedPreferences getSP(String name, int mode) { ... synchronzed (ContextImpl.class) { ... file = mSharedPrefsPaths.get(name); if (file == null) { file = getSHaredPreferencesPath(name); //就是计算出

2022-01-27 10:39:15 289

原创 CountDownLatch

使用构造时,指定一个int 门栓个数线程A 执行cdt.await(),线程A会park 挂起线程B 调用 cdt.coundDown(); 会打开一个门栓,直到门栓个数是0时,notify 所有park 的线程主要方法class CountDownLatch { public CountDownLatch(int count) {} public await() {} public coundDown() {}}原理AbstractQueuedSynchronizer实现

2022-01-26 19:00:11 108

原创 PendingIntent

创建调用封装好的接口创建PIPendingIntent pi = PendingIntent.getActivity(mContext, 0, new Intent("com.a.b"), 0);Notification n = new Notification.Builder() .setContentIntent(pi) .. .build();原理总结app 端会调用AMS 获取 PIRecordAMS 创建PIRecord 后,会自己保存一份,再返回给appapp中调用

2022-01-25 11:36:32 2132

原创 sdk版本-代号

android api level代号31s30r29q28p

2022-01-20 20:45:54 2049

原创 socket--java

server端创建ServerSocket对象 对应c++的: 1. 创建 serverSocket 2. 创建 serverSocketAddress 3. 把地址bind到serverSocket 4. listen(serverSocket, backlog) serverSocket = ServerSocket(int port, int backlog, InetAddress bindAddr);获取clientSocket 对应c++的: 1. clientS

2021-12-22 17:12:56 285

原创 socket-c++

C++中,linux服务端创建用于监听client的socket(int af, int type, int protocol)1. af:address family,指定ip类型,用的ipv4还是ipv62. type:socket类型,包括sock_stream、sock_dgram,也就对应着tcp 、udp3. protocol:传输协议用 tcp还是udp。如果type可以推算出protocol来,可以写默认值0。创建 sockaddr_in 结构体,用于指定监听server

2021-12-22 16:00:09 486

原创 m的n进制

整数java里,只有整数转换接口,没有小数Integer.toBinaryString(int); 小数含义十进制二进制0.50.11个苹果分10个0.1,0.5份有多少1个苹果分2份,0.1份有多少5/101/2计算方法乘2取整法:0.6 *2 = 1.2 – 0.1余0.20.2 * 2 = 0.4 – 0.100.4 * 2 = 0.8 – 0.1000.8 * 2 = 1.6 – 0.1001 余0.6…原理:二进制的小数:0

2021-12-18 15:28:25 432

原创 settings

原理通过 ContentProvider 和 ContentObserver实现的调用方式改值 void test() { Settings.Global.putString(contentResolver, name, value); }取值 void test() { Settings.Global.getString(contentResolver, name); }监听变化 void test() { contentResolver.registerContent

2021-12-17 15:41:15 998

原创 csdn-markdown教程

官方教程

2021-12-16 09:26:13 79

原创 wallpaper_md

​设置壁纸void changeWallpaper(Bitmap targetBitmap) { WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); wallpaperManager.setBitmap(targetBitmap);}wallpapermanager和 wallpaperManagerServiceWallpaperManager { static Wallp

2021-12-09 16:23:03 313

原创 GLSurfaceView

参考了:https://www.jianshu.com/p/369d5694c8ca使用Renderer,在GLSurfaceView里画。class MyGLSurfaceView extends GLSurfaceView { public MyGLSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); setRenderer(new MyRender());

2021-12-09 15:27:50 2929

原创 surfaceView

如何显示surfaceView extends View,所以把它添加到ViewTree中。当ViewRootImpl开始performTraversals时,window可见时,会回调SurfaceView.onWindowVisibilityChanged(),进而执行updateSurface()。除了window可见,还有很多情况会回调updateSurface()。ViewRootImpl如何获取surfaceViewRootImpl中,surfaceControl是通过windowSe

2021-12-08 15:21:26 470

原创 ViewRootImpl

什么时机可以修改ViewRootImpl.mSurface?        在activity的onAttachToWindow.ViewRootImpl是怎么创建出来的?ActivityThread.handleResumeActivity,如果a.mVisibleFromClient(a是activity,mVisibleFromClient是通过activity.setVisible()设置的),则调用wm.addV

2021-12-08 14:25:14 257

原创 wallpaper

设置壁纸void changeWallpaper(Bitmap targetBitmap) { WallpaperManager wallpaperManager = WallpaperManager.getInstance(context); wallpaperManager.setBitmap(targetBitmap);}wallpapermanager和 wallpaperManagerServiceWallpaperManager { static W..

2021-12-02 09:27:28 529

原创 ContentProvider

App端进程创建后,执行ActivityThread.main(); 创建ActivityThread实例,并执行attach(); 通知AMS本进程创建完成了,AMS.attachApplication(mAppThread, startSeq);AMS的attachApplicationLock中,会找到这个app的providerAMS { attachApplicationLocked() { List<...

2021-11-29 16:29:14 89

原创 contentObserver

文字描述1,注册时,在ContentService中,uri的"/"将uri分成各个segment,每个segment创建一个ObserverNode。在与uri完全匹配的那个Node中,将ContentObserver保存进去。2,notifyChange时,uri会找到匹配的ObserverNode,然后取出这个Node中所有的ContentObserver,然后告诉这个ContentObserver。注册监听ContentResolver { registerCont

2021-11-29 15:27:54 825

原创 虚拟机hybrid编译

是否开启 jit 编译开启adb rootadb shell stopadb shell setprop dalvik.vm.extra-opts -verbose:jitadb shell start关闭:adb rootadb shell stopadb shell setprop dalvik.vm.usejit falseadb shell start强制编译全编译某个apk:adb shell cmd package compile -m speed -..

2021-11-29 15:27:38 1357

原创 ValueAnimator运行原理

start()中,会调用addAnimationCallback(0); getAnimationHandler().addAnimationFrameCallback(this, delay); //getAnimationHandler()获取到的是AnimationHandler这个单例 getProvider().postFrameCallback(mFrameCallback); //单例中,第一次有动画开始,向Choreography中post一个 FrameCal

2021-11-29 15:26:46 89

空空如也

空空如也

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

TA关注的人

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