Android
文章平均质量分 62
怪叔叔萝莉控
学一门新技术,要放下姿态,从零开始
展开
-
StrictMode分析Registion-StrictMode原理(4)
这里的Registion主要有两种,分别是Service、BroadCastReceiver:这里先补充一个前置知识点,stopService的流程:我们需要的检测时机,在removeContextRegistrations,这里面用到了两个成员变量:原创 2022-06-23 08:56:56 · 460 阅读 · 1 评论 -
StrictMode带来的思考-StrictMode原理(5)
StrictMode总的来说,是一个插桩思想的体现,也是AOP常用到的技术,在系统的各个可能产生问题的函数埋上桩子,等问题发生,将问题暴露到StrictMode。同种思想可以运用到计算函数执行时间,超过某个数值即进行暴露常用的代码插桩方式有两种,分别是类似StrictMode这种的静态插桩,另一种这是在编译时,通过ASM等框架,自动插桩的。ASM动态插桩,可以避免开发者自己每个函数都进行插桩,还是举计算函数时间的例子,我们完全可以写好两个静态函数,之后再函数开始前与结束来插入。类似此种,对于一些不需要统计原创 2022-06-23 08:55:30 · 271 阅读 · 0 评论 -
StrictMode卡顿与泄漏检测-StrictMode原理(2)
StrictMode的关闭检测其实是比较简单的,基本上就是在开启的时候埋桩,释放的时候检测桩子是否有关闭,没有关闭则检测为泄漏。这里有一个预备知识,那就是CloseGuard,它是一个StrictMode专门为了处理此类事情的类,主要包括三个函数:2.1 IO关闭检测回顾一下之前的例子埋炸弹 -首先来看看构造函数:拆炸弹 - 关闭输出流爆炸 - 没有调用close便被回收同理推断其他的流也会有其他的机制来检测泄漏。看卡顿前,我们需要先准备点预备知识,IO读取与写出的预备知识:我们需要关注的主要原创 2022-06-23 08:35:59 · 752 阅读 · 0 评论 -
使用StrictMode-StrictMode原理(1)
StrictMode如何使用,StrictMode原理,StrictMode入门原创 2022-06-23 08:33:29 · 645 阅读 · 0 评论 -
十六、View.post和Handler.post的区别
View.post和Handler.post1.View.post的实现首先我们还是先使用View.post的常用场景:class MainActivity : AppCompatActivity() { private val TAG = "MainActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setCo原创 2021-09-01 00:02:30 · 879 阅读 · 0 评论 -
十五、HandlerThread的使用和源码
HandlerThread我们都知道是用来在子线程使用Handler的,那我们来看看,如果不用HandlerThread,我们怎么在子线程使用Handler呢?示例代码片段:自定义Thread开启Handler fun startHandlerWithThread() { Thread { Looper.prepare() mCustomThreadHandler = object : Handler(Looper.myLooper原创 2021-08-28 17:32:59 · 123 阅读 · 0 评论 -
十四、Android常用控件使用指南(持续更新)
Shape圆角矩形shape:<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- rectangle表示为矩形 --> <!-- 填充的颜色 --> <solid android:color="#FAFAFA" /> <!-- 边框的颜色和粗细 -->原创 2021-01-07 23:52:06 · 252 阅读 · 0 评论 -
十三、Android如何使用SystemTrace
SystemTrace解决的问题分析api耗时,解决应用程序卡顿的问题如何使用现在代码中埋点: Trace.beginSection("app onCreate");//开始点 Trace.endSection();//结束点python systrace.py -t 5 -o ~/Trace/mytrace3.html -a packagename需要说明的是位于android sdk/platform-tools文件夹里面,python版本为2.7需要安装的python插件pip原创 2020-11-17 14:37:14 · 1244 阅读 · 0 评论 -
十二、Android的沉浸与动态沉浸
Window的各种效果默认的效果导航栏显示,内容处于导航键上方style <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <it原创 2020-11-06 19:00:12 · 324 阅读 · 1 评论 -
十一、Android坐标系
前言Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,在这个系列中我会陆续讲到View坐标系、View的滑动、View的事件分发等文章来逐步介绍Android View体系。1.View简介View是Android所有控件的基类,同时ViewGroup也是继承自View,看下面这张图我们就会有一个直观的了解:知道了View的层级关系有助于对View的理解...转载 2020-04-04 21:17:28 · 321 阅读 · 0 评论 -
十、Material Design记录(待更)
CoordinatorLayout控制协调子viewTabLayouttabMode:fixed //固定tabMode:scrollable //可横向滑动适用于较多tab页面原创 2017-12-16 23:42:52 · 292 阅读 · 0 评论 -
九、Android混淆
Android混淆没什么特别的.就是能让显得牛逼一点.让破解你软件的人痛苦很多.接下来给大家讲讲混淆的基本概念,Android混淆主要分为四个阶段压缩(Shrink): 侦测并移除代码中无用的类、字段、方法、和特性(Attribute)。优化(Optimize): 分析和优化字节码。混淆(Obfuscate): 使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名。 前...原创 2017-10-24 11:01:59 · 655 阅读 · 0 评论 -
二、Lambda表达式
Java 8新特性.个人感觉能减少不少没必要的格式代码.可以理解为匿名函数Lambdalambda好处bad codelambda codeLambda语法Lambda 表达式的结构Lambda使用日常Runnable函数赋值List遍历Android OnclickListenerMapLambda动手写Android添加Lambda支持Lambdalambda好处bad原创 2016-06-05 02:15:37 · 436 阅读 · 0 评论 -
三、自定义注解
注解的使用我就不讲了.这里讲讲自定义注解吧.学习自定义注解之前,要先了解几个元注解(用来修饰注解的注解=.=)注解元注解Target作用源代码参数Document作用源代码参数Retention作用源代码参数Inherited作用源代码参数自定义注解最简单注解带参数的注解读取注解信息注解元注解@Target作用用来标注注解的作用域源代码@Documented原创 2016-06-13 13:20:14 · 489 阅读 · 0 评论 -
四、触摸事件
触摸事件的常用方法onTouch //处理触摸事件onTouchEvent //处理触摸事件,如果onTouch已经执行并返回true,这个将不执行dispatchTouchEvent //事件派发onInterceptTouchEvent//事件拦截requestDisallowInterceptTouchEvent//是否允许拦截onTouchonTouchEventdispatch原创 2016-06-14 21:12:23 · 569 阅读 · 0 评论 -
五、Android局域网多播(组播)
多播 组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式。IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IPv4中组播地址范围为224.0.0.0到239.255.255.255发送端package com.turing.mobilecontrol;import java.io.IOExcepti原创 2016-12-21 10:42:26 · 6106 阅读 · 0 评论 -
六、Android分多个dex
前言 通常Android应用功能较多就会超过65536.也就是64k.解决的办法,我现在知道的也只有分多这个dex。这里用的是multidex第一步引入app.gradle:compile 'com.android.support:multidex:1.0.1'第二步配置module的app.gradle:android{... dexOptions { preDexLib原创 2017-01-06 16:41:54 · 911 阅读 · 0 评论 -
一、android实用代码段(持续更新)
双击回退按钮退出程序 boolean isExit = false; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Log.e(TAG + "======", "keyback原创 2015-11-18 16:07:28 · 776 阅读 · 0 评论 -
八、Handler机制源码解析
Handler机制的主要对象有Handler、Looper、MessageQueue、Thread、ThreadLocal.下面我按照咱们使用Handler程序执行的思路.来给大家捋一下.1.在子线程使用Handler[]() 可以看到.这个new Handler的时候.主要是获取Looper里面的MessageQueue引用.然后给mCallback 和mAsynchronous 赋值.构造函数原创 2017-09-18 13:52:06 · 484 阅读 · 0 评论 -
七、多线程(未完.待更)
序言Java多线程两种方式synchronized的两种种用法序言 指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个执行绪,进而提升整体处理性能Java多线程两种方式:继承Thread实现Runnablesynchronized的两种种用法锁对象.当所有的线程都访问这个对象的同一个方法.锁public void test()原创 2017-05-24 18:37:46 · 350 阅读 · 0 评论