- 博客(50)
- 资源 (4)
- 问答 (1)
- 收藏
- 关注
原创 AMS相关数据结构
进程主要占用的资源:ProcessRecord和组件记录表两个容器ProcessRecord 数据结构描述进程身份的数据描述进程中组件的数据描述进程状态的数据和内存相关的数据和时间相关的数据crash和anr相关的数据和instrumentation相关的数据(管理生命周期)电源信息和调试信息ProcessRecord容器永久性容器1.mProcessNames:根据进程名字检索进程记录表 2.mPidsSelfLocked:根据进程pid检索进
2021-03-13 18:34:11
550
原创 AMS-WMS-APP间的匿名Binder:Token
Token涉及的代码路径如下:frameworks/base/services/core/java/com/android/server/am/ --- ActivityManagerService.java --- ProcessRecord.java --- ActivityRecord.java --- ActivityResult.java --- ActivityStack.java --- ActivityStackSupervisor.java --- Acti
2021-03-10 11:00:07
493
原创 并发编程的一切
1、线程基础、线程之间的共享和协作1、基础概念什么是进程和线程进程:程序运行资源分配的最小单位资源:CPU、内存空间、磁盘 IO 等,同一进程中的多条线程共享该进程中的全部系统资源。进程和进程之间是相互独立的,可以分为系统进程和用户进程。凡是用于完成操作系统的各种功能的进程就是系统进程,它们就是处于运行状态下的操作系统本身,用户进程就是所有由你启动的进程。线程是 CPU 调度的最小单位必须依赖于进程而存在线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的、能
2020-12-25 08:16:20
427
原创 静态和动态代理
介绍代理模式涉及到三个对象行为接口真实对象代理对象行为接口/** * 代理抽象角色: 定义了服务的接口 */public interface Massage { void massage();}真实对象/** * 实实现类: Qit */public class Qit implements Massage, Wash { @Override public void massage() { System.out.println
2020-12-04 19:59:21
164
原创 Java注解
元注解元注解顾名思义我们可以理解为注解的注解,它是作用在注解中,方便我们使用注解实现想要的功能。元注解分别有@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)五种。@Target表示该注解可以用在什么地方ANNOTATION_TYPE 可以应用于注释类型CONSTRUCTOR 可以应用于构造函数FIELD 可以应用于字段或属性LOCAL_VARIABLE 可以应用于局部变量METHOD 可以应用于方法级注释
2020-12-03 21:46:35
117
原创 关于进程保活的一切
进程保活一、进程保活 6.0以下1)监听广播方式2)提高Service的优先级3)全局定时器4)应用中的双service拉起5)应用中的双进程拉起6)单进程守护7)双进程守护二、进程保活 6.0~8.0(一)防杀策略1)开启前台Service2)监听锁屏广播,制造1像素2)循环播放一段无声音频(二)复活策略1)使用JobScheduler2)推送SDK3)第三方应用互相唤醒三、进程保活8.0以上(一)保活困难的原因1)应用待机分组1、活跃 (Active)2、工作 (Working set)3、常用 (Fr
2020-06-20 22:43:06
691
原创 Kotlin(七)、object关键字
一、创建单例Java中构造方法私有化且使用静态字段持有类实例来创建单例Kotlin中的对象声明将类声明和单例声明结合到了一起object Payroll{ val allEmployees = arrayListOf<Person>() fun calculateSalar(){ for (person in allEmployees){ ...
2019-09-04 19:25:01
174
4
原创 Kotlin(六)、类.对象和接口
一、定义类接口//使用interface关键字声明一个Kotlin接口interface Clickable { fun click()}//实现这个接口class Button : Clickable {//使用`:`代替Java中的extends和implements关键字,和Java一样单继承多实现 override fun click() = println(...
2019-09-02 11:53:56
486
原创 Kotlin(五)、函数定义与调用
一、为了更方便调用一个函数定义如下: /** * 实现输入一个集合,如1,2,3 通过这个方法打印出 (1;2;3) */ fun <T> joinToString(collection: Collection<T>,//输入集合 separator: String,//分隔符 ...
2019-08-21 20:28:21
454
2
原创 Kotlin(四)、创建集合
val set = setOf(1, 2, 3) println(set.javaClass) val hashset = hashSetOf(1, 2, 3) println(set.javaClass)//java.util.HashSet val list = listOf(1, 2, 3) println(set.javaClass)//ja...
2019-08-21 17:34:54
633
原创 Kotlin(三)、控制结构
一、枚举和whenwhen可以认为是加强版的switch枚举类/** * 简单枚举 */enum class Color { RED, ORANGE, YELLOW }/** * 还可以枚举类声明属性和方法 */enum class Color(val r: Int, val g: Int, val b: Int) { RED(255, 0, 0), ORANGE(2...
2019-08-14 11:35:18
155
原创 Kotlin(二)、声明变量、函数、类、属性
一、声明函数、变量、类、枚举、属性变量以关键字开始,接变量名,最后可加类型: val a = 12 val a: Int = 1//因为赋值的类型是确定的,所以可以省略类型如果不加指定的变量类型,编译器会分析初始化表达式值,并将其类型作为变量类型。如果不提供可以赋给这个变量值的信息,编译器就无法推断类型。val(来自value)——不可变引用。相当于final。var(...
2019-08-13 15:32:00
366
原创 Kotlin(一)、简介
由于一个Kotlin语法引起的bug,让我决定再次重新学习一遍Kotlin!!!Kotlin以靠近俄罗斯圣彼得堡的一座岛屿命名,Kotlin的大部分开发团队就在那里。Kotlin专注于与Java代码的互操作性,他几乎可以用在现在Java使用的的任何地方,可以很好的和所有现存的Java库和框架一起工作,并且性能水平和Java旗鼓相当。其优点分为4部分:务实设计基于多年创建大型系统的工作经...
2019-08-12 17:02:23
220
原创 Android全埋点技术介绍
一、全埋点是什么预先收集用户所有的行为数据,而后根据需求从中提取行为数据,也叫无埋点、无码埋点、自动埋点主要为处理四种事件:$AppStart事件:启动App,包括冷热启动$AppEnd事件:退出App,包括正常退出、进入后台、crash、force kill$AppViewScreen事件:浏览App页面$AppClick事件:App控件点击这四点中$AppClick是难度最大...
2019-07-10 20:14:20
3716
1
原创 算法:动态规划(1.钢条切割)
Dynamic programming 动态规划,与分治法相似,都是通过组合字问题的解来求解原问题,但动态规划是应用于子问题重叠的场景,每个子问题都只求一遍,将解存入表格中,避免不必要的重复工作。问题:购买长钢条,将其切割为短钢条出售,切割...
2019-07-04 20:30:17
1778
原创 Android接入腾讯Bugly统计SDK
本来我们App是接入的友盟统计的SDK,但是确实是不太好用,上个版本iOS先接入了Ugly作为尝试,发现与需求相符比友盟略好,所以这个版本Android要引入Bugly统计因为热更新功能很早之前就接了tinker,所以就没再依赖这里面的步骤就是按文档走,这里简单记录一下集成SDK 在Module的build.gradle文件中添加依赖和属性配置:dependencies { c...
2019-07-04 11:15:37
982
原创 Glide深入探索(二),流程分析
【齐天的博客】转载请注明出处(万分感谢!): https://blog.youkuaiyun.com/qijinglai/article/details/81001708在上一篇中我粗略的介绍了Glide的基本用法Glide深入探索(一),学会使用,核心就是代码太简单了,只需一句便能实现功能Glide.with(this).load(url).into(imageView);那么在这一篇中我...
2018-07-31 19:04:25
449
原创 Android网络编程(一次网络请求)
先来描述一次网络请求过程:域名解析TCP三次握手建立连接后发起Http请求服务器响应请求浏览器解析Html代码,同时请求资源浏览器渲染TCP四次挥手 接下来一步一步分析域名解析一张图搞定 三次握手我把握手挥手的过程,比作网络上跟帖或表示赞同的“1”或者“+1”,模拟一个对话有点事想找一下隔壁办公室的阿冰。我:“阿冰,在吗?”冰:“1”我:“...
2018-07-30 15:39:14
2421
原创 Android网络编程(Http协议篇)
前言这篇文章是这个系列的开篇,作为移动开发者,开发的应用不免会对网络进行访问,虽然现在已经有很多的开源库帮助我们可以轻而易举的访问网络,但是我们仍要去了解网络访问的原理,这也是一个优秀开发人员所必备的知识点。这篇文章我们就先来了解一下HTTP协议原理。...
2018-07-29 23:14:22
4694
1
原创 一张图搞定,Activity的启动流程
秋招开始了啊,盼了好久,所以现在面临我的是!明显笔试比不过刷算法的→找内推又不认识人→苦心找到了→双非学校,简历又很难通过=项目经验没用。。。 其实想这个也没什么用,还是一步一步来,本着一个突击不如多花一阵沉淀自己的原则继续我的读源码的路。接着上次聊聊Activity的生命周期,onSaveInstanceState/onRestoreInstanceState源码分析,继续聊Activit...
2018-07-24 15:17:42
5846
10
原创 聊聊Activity的生命周期,onSaveInstanceState/onRestoreInstanceState源码分析
1.1生命周期典型:用户参与下的生命周期改变异常:①系统回收Activity ②设备的Configuration改变导致Activity销毁重建1.1.1典型下需要注意若onCreate中加入finish(),则不会调用onStart 流程:onCreate→onDestroy若onCreate中加入super.onStop/onDestroy,则会调用onStar...
2018-07-18 00:03:45
2771
原创 Glide深入探索(一),学会使用
前言Stop Trying to Reinvent the Wheel!在图片加载中涉及到很多问题如:缓存处理,大图的加载,OOM异常优化,线程池管理,Handler来进行线程间通信等等等等,本着不造轮子的原则,我们第一步要先学会使用开源框架,之后再去拜读源码了解其中原理。而我们常见常用的图片加载框架有一下几个:UniversalImageLoaderFrescoGlidePica...
2018-07-11 17:15:14
481
原创 Android的序列化(Serializable和Parcelable)
前言Android中要实现对象持久化或者对象传输就一定会用到对象序列化的操作,Android中实现序列化的方式有两种,一种是实现Java中的Serializable接口,另一种是实现Android中的Parcelable接口。当然,既然Android专门提供了序列化接口,那么一定是Parcelable的效率会更高一点。下面我们分析一下这两种方式。Serializable它是Java...
2018-06-26 22:42:07
221
原创 Android多线程(Executor线程池篇)
【齐天的博客】转载请注明出处(万分感谢!): https://blog.youkuaiyun.com/qijinglai/article/details/80685226关联文章: Android多线程(Handler篇) Android多线程(AsyncTask篇) Android多线程(HandlerThread篇) Android多线程(IntentService篇) 前言在...
2018-06-25 22:30:28
5301
原创 Android多线程(IntentService篇)
前言例如上传下载等操作原则上要尽可能的交给Service去做,原因就是上传等过程中用户可能会有将应用至于后台,那这时候Activity很有可能就被杀死了。如果担心Service被杀死还能通过startForeground提升优先级。 但在Service里需要开启线程才能进行耗时操作,自己管理Service与线程听起来就不像一个优雅的做法,此时就可以用到Android提供的一个类,Intent...
2018-06-20 15:47:59
1676
原创 Android多线程(HandlerThread篇)
在之前Android多线程(Handler篇)中讲解了ThreadLoacl、Looper、Handler、Message之间的关系,在主线程中为我们工作。其实我们可以借鉴UI线程Looper的思想,建一个子线程,也通过Handler、Looper通信,可以适用于很多场景。 主线程中是自带looper的,而在子线程中使用Handler需要自己创建looper,而HandlerThread的注释中...
2018-06-19 16:30:04
1964
原创 Android多线程(AsyncTask篇)
上一篇详细的分析了Handler的源码和工作原理,使用时需要分别在Thread和Handler中编写代码逻辑,AsyncTask是Android提供的类,由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它。它对Thread和Handler进行了封装,使得代码更加统一,我们无需关注Thread和Handler,AsyncTask内部会对其进行管理,这样我们就只需要...
2018-06-19 11:56:55
1933
原创 Android多线程(Handler篇)
由于Android中的耗时操作不能放入主线程中,所以实现多线程是必须的。今天的主角是Handler,本文将从使用及源码来分析探索其奥秘。使用步骤:创建Handler对象,实现handlMessage()方法创建Runnable线程此时产生一个Looper,并自动创建一个消息队列MessageQueue()Looper轮询MessageQueue交给HandlerHandl...
2018-06-13 23:09:01
13367
1
原创 票据打印机-ESC/POS指令使用
给打印机输入串口命令,是打印机处于一种状态,然后就能干你想让他干的活了.百度ESC/POS文档随便拿一个正规的都一样,就不在这里放地址了,拿到这个文档以后代码的编写我只举一个例子,其它的模式也都一样 比如说这个功能为初始化打印机,他有三种输入模式,第一种是ASCII码(ESC @),第二种是Hex也就是16进制数(1B 40),第三种Decimal十进制数(27 64),我以16进制为例,那么
2017-08-09 09:23:09
18155
原创 解决AndroidStudio用setText()方法乱码
使用setText赋值后出现中文乱码,无论是统一为UTF-8编码,还是修改版本都毫无作用。最后在build.gradle文件下添加了android{compileOptions.encoding=”GBK”}成功解决了该问题成功
2017-07-31 17:34:52
1132
原创 Android控制蓝牙票据打印
七月十二号,来公司的第二天,给我布置了做控制蓝牙打印机打印小票的APP的任务,为了能让客户随时打印票据,功能倒是挺符合人的需求, 今天没事做就总结总结这个吧,之前的那篇弹性拉伸,发现已经有好多人做过了,还有视频教程,就不更新了.总结起来一共分以下几步蓝牙连接与关闭蓝牙通道的建立与关闭给打印机输入信号来打印格式的设置打印很简单的几个步骤
2017-07-28 16:57:42
596
原创 懒人的findviewbyid
好久没更,今天分享一个我的代码习惯吧. 当控件很多的时候,找控件这件事是非常繁琐的, 就象这样private TextView tv;...tv = (TextView)findViewbyId(R.id.tv);一行也很长,虽然有提示,强制转换也可以用快捷方式,但是还是觉得麻烦而且看着不舒服很久之前对于还没用惯提示的我,对这种常用又很长的代码,比如findViewbyId(R.id.);
2017-07-28 09:33:45
760
原创 Android异常之ForceClose
ForceClose异常会使程序崩溃并弹出xxx已停止的对话框,像下标越界 空指针等问题都会抛出这个异常,这种异常主要通过Thread.UncaughtExceptionHandler这个类来捕获异常,只需实现这个接口重写uncaughtException(Thread arg0, Throwable arg1)public class MainActivity extends Activity i
2017-01-31 22:08:46
388
原创 Android如何退出时退出多个Activity
使用List,在退出时把list列表中的activity全部干掉 重点:全局中使用单例模式的链表public class SysApplication extends Application { private List<Activity> mList = new LinkedList<Activity>(); private static SysApplication inst
2017-01-31 12:58:21
359
原创 SQLServer 2008 R2删除登录名时报如下错误
SQLServer 2008 R2 删除登录名时报如下错误:无法删除登录名,因为该用户正处于登录状态,错误15434解决办法:1、首先执行exec sp_who查出用户进程的spid,如下图所示 注:exec sp_who命令查询所有用户进程的spid 2、然后执行kill spid,如下所示 3、最后执行sp_droplogin删除登录名,也可以在SQL Server Management
2017-01-16 10:07:18
1127
2
原创 asp.net后台设置控件百分比的长度
控件.Width=Unit.Percentage(100); //等于前台设置 width=”100%”;
2016-12-09 13:59:23
1295
2
原创 asp.net手机网页横向适应屏幕
横向适应手机屏幕 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">head里加上这个标签就行了,具体每句话什么意思百度就好.
2016-12-03 16:21:33
1014
大量的if,如何优化代码
2017-08-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人