<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alrict的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Alrict</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alrict]]></copyright><item><title><![CDATA[前端安全相关]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121733634</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121733634</guid><author>Alrict</author><pubDate>Sun, 05 Dec 2021 19:18:23 +0800</pubDate><description><![CDATA[前端安全
xss跨站脚本攻击
原理
攻击者往web页面里面插入恶意可执行网页脚本代码，当用户访问网站时时，嵌在web里面的恶意脚本被执行，从而达到获取用户信息或者其他目的的行为
定义
通过存在安全漏洞的web网站注册用户的浏览器内运行非法的html标签或者是js代码进行的一种攻击
类型
存储型xss
特点
持久型xss攻击，恶意代码存储在服务端，来源于后端从数据库中读取出的数据
攻击流程
1.攻击者提交恶意代码到网站的服务器数据库中
2.用户访问网站，服务器将恶意代码取出，拼接到html中，返回给浏览器
3]]></description><category></category></item><item><title><![CDATA[Zygote的作用]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121727551</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121727551</guid><author>Alrict</author><pubDate>Sun, 05 Dec 2021 16:05:07 +0800</pubDate><description><![CDATA[作用：

启动SystemServer；
孵化应用进程

Zygote的启动流程分为两部分：

1.Zygote进程是怎么启动的？


服务名称+可执行路径+参数

2.进程启动之后做了什么事？





]]></description><category></category></item><item><title><![CDATA[java基础]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121726170</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121726170</guid><author>Alrict</author><pubDate>Sun, 05 Dec 2021 11:44:58 +0800</pubDate><description><![CDATA[java的String可以有多长？
字面量
String text = “aaaa…aa”
存储在栈中

堆



java匿名内部类有什么限制？


java的方法分派

取决于调用者在运行时的实际类型。即new SubClass()，调用的必然也是SubClass的getName()

java泛型的实现机制

...]]></description><category></category></item><item><title><![CDATA[线程的消息屏障]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121716148</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121716148</guid><author>Alrict</author><pubDate>Sat, 04 Dec 2021 16:11:39 +0800</pubDate><description><![CDATA[消息分类
参考文章 Handler之消息屏障
消息可以分为三种

普通消息（同步）normal
屏障消息（同步）barrier
异步消息async


我们通常使用的都是普通消息，而屏障消息就是在消息队列中插入一个屏障，在屏障之后的所有普通消息都会被挡着，不能被处理。不过异步消息却例外，屏障不会挡住异步消息，因此可以这样认为：屏障消息就是为了确保异步消息的优先级，设置了屏障后，只能处理其后的异步消息，同步消息会被挡住，除非撤销屏障。

我们如何在消息队列中插入一个消息屏障？

postSyncBarrier]]></description><category></category></item><item><title><![CDATA[应用的主线程进入loop循环，为什么不会发生ANR?]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121713918</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121713918</guid><author>Alrict</author><pubDate>Sat, 04 Dec 2021 14:58:14 +0800</pubDate><description><![CDATA[ANR的触发原理

ANR:App not responding


mUiHandler是systemService的handler,但是不在主线程,而是在子线程(刷新ui不一定需要在主线程)
触发ANR的场景：


Service timeout





BroadcastQueue timeout


ContentProvider timeout


InputDispatching timeout(输入事件无响应)


应用的大致启动流程
应用主线程的消息循环：

哪些线程可能会给主线程发送消息]]></description><category></category></item><item><title><![CDATA[IdleHandler原理]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121700264</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121700264</guid><author>Alrict</author><pubDate>Sat, 04 Dec 2021 12:14:51 +0800</pubDate><description><![CDATA[IdleHandler是什么？有什么用？怎么用？
是什么？

是个回调接口。当发现这个线程阻塞等待消息的时候就会触发这个回调
queueIdle()返回值是boolean。当messageQueue里面的所有消息都处理完了或者等待下一条消息的时候（触发时机还没到）会触发。当return true，表示IdelHandler一直有效，false表示这个IdelHandler要被移除。


怎么用？


当return true，表示IdelHandler一直有效，false表示这个IdelHandler要被移]]></description><category></category></item><item><title><![CDATA[Handler消息延迟机制是怎么实现的？]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121697909</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121697909</guid><author>Alrict</author><pubDate>Fri, 03 Dec 2021 15:30:01 +0800</pubDate><description><![CDATA[消息延时是怎么实现的？

消息队列按消息触发时间由近及远进行排序
设置epoll-wait的超时间，使其在特定的时间唤醒（计算下一条消息的触发时间与当前时间的时间差作为epoll-wait的超时时间）


 sendMessageDelayed(Message msg,long delayMillis){
 if(delayMillis &lt; 0){
 	delayMillis = 0;
 }
 //当前时间+延时时间 = 目标触发时间
 return sendMessageAtTime(msg,Sys]]></description><category></category></item><item><title><![CDATA[Android线程间的消息传递机制]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121688558</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121688558</guid><author>Alrict</author><pubDate>Fri, 03 Dec 2021 12:23:29 +0800</pubDate><description><![CDATA[android的线程间的通信可以理解成三个部分：消息的发送、消息的循环、消息的分发处理

消息是怎么发送的？

核心是理解sendMessage()里面做了哪些操作


handler.sendMessage()
handler.sendMessageDelayed()
handler.sendMessageAtTime()

需要注意的是，sendMessageAtTime不是指要在这个时间插入这条消息，而是在这个时间将该消息分发出去


handler.enqueueMessage()
message.]]></description><category></category></item><item><title><![CDATA[关于Handler的一些思考]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/121686513</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/121686513</guid><author>Alrict</author><pubDate>Thu, 02 Dec 2021 22:50:02 +0800</pubDate><description><![CDATA[这里写自定义目录标题关于Handler的一些思考1.在子线程中可以创建handler吗？2.主线程的Looper与主线程的Looper有什么区别3.Looper和MessageQueue有什么关系4.MessageQueue是如何创建的？
关于Handler的一些思考
1.在子线程中可以创建handler吗？
答案是可以的
//错误示例
	new Thread(){
            @Override
            public void run() {
                n]]></description><category></category></item><item><title><![CDATA[常用通讯协议简述]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/107781198</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/107781198</guid><author>Alrict</author><pubDate>Tue, 04 Aug 2020 10:56:52 +0800</pubDate><description><![CDATA[常用通讯协议简述UDP概述优点缺点适用场景TCP优点缺点适用场景MQTT概述优点缺点适用场景
UDP
概述
UDP是一种高效但不可靠的协议。

UDP是一种 面向报文、非连接的协议。具体表现为发送数据前无需与服务端建立连接，数据发送完毕后亦无需断开连接（没有连接可断开），如此一来，减少了建立和断开连接时的开销，无需像TCP一样建立连接需要3次握手，断开连接需要4次握手。
UDP 不存在拥塞机制。即源主机不会因为网络拥塞而降低发送速率。
UDP 不能保证交付。这个特性容易导致丢包、乱序的情况。

优点

高效]]></description><category></category></item><item><title><![CDATA[android 解决部分手机Android系统8.0以上在锁屏状态收到消息无法在锁屏页点亮并显示消息的问题]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/89492069</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/89492069</guid><author>Alrict</author><pubDate>Wed, 24 Apr 2019 14:26:45 +0800</pubDate><description><![CDATA[背景介绍
最近在做IM相关的项目，产品需求是用户在线，但用户手机是息屏状态或在解锁页面的情况下收到新的消息，需要在自动点亮屏幕并显示通知样式的内容，点击消息跳转到具体的聊天界面，就像QQ或微信锁屏状态下的消息处理。
解决思路（只贴重要代码）
1.首先需要在锁屏页显示具体的消息内容，需要一个activity，此activity需要亮屏
    @Override protected void onC...]]></description><category></category></item><item><title><![CDATA[Android studio创建aidl文件]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/81981265</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/81981265</guid><author>Alrict</author><pubDate>Thu, 23 Aug 2018 15:08:45 +0800</pubDate><description><![CDATA[Android studio创建aidl文件

1.找到工程的java文件的最外层包 
 
2.创建Person的java类并实现Parcelable序列化 
 
2.创建IPersonManager.aidl,Person.aidl文件


  注:AIDL文件默认是要以大写字母I开头的名称,不能直接创建Person.aidl文件,先随便创建IPerson.aidl,创建好了之后可以通过Refa...]]></description><category></category></item><item><title><![CDATA[RN项目报错: Could not resolve all files for configuration ':classpath'.]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/81945135</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/81945135</guid><author>Alrict</author><pubDate>Wed, 22 Aug 2018 15:35:26 +0800</pubDate><description><![CDATA[RN项目报错: Could not resolve all files for configuration ‘:classpath’.

报错信息如下图: 


解决办法: 
在android目录下的build.gradle中给jcenter仓库指定url,具体用法如下 
 
可直接复制下列代码:

buildscript {
    repositories {
        jcenter(...]]></description><category></category></item><item><title><![CDATA[Android IPC 通信机制]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/81907446</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/81907446</guid><author>Alrict</author><pubDate>Tue, 21 Aug 2018 16:09:25 +0800</pubDate><description><![CDATA[1.1IPC是Inter Process Communicationde的缩写,意为跨进程通信或进程间通信.

进程和线程的区别与关系:


进程:一般是指一个执行单元,在pc和移动设备上指一个程序或一个应用.
线程:是cpu调度的最小单元,同时线程是有限的系统资源.
一个进程可以包含多个线程,因此进程和线程之间是包含和被包含之间的关系.




2.1如何开启多进程?

在Android中多进程...]]></description><category></category></item><item><title><![CDATA[Activity的启动模式详解]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/81806907</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/81806907</guid><author>Alrict</author><pubDate>Sat, 18 Aug 2018 14:37:04 +0800</pubDate><description><![CDATA[1.1Activity为什么要有启动模式?

&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;am]]></description><category></category></item><item><title><![CDATA[Activity生命周期分析]]></title><link>https://blog.youkuaiyun.com/Alrict/article/details/81781445</link><guid>https://blog.youkuaiyun.com/Alrict/article/details/81781445</guid><author>Alrict</author><pubDate>Fri, 17 Aug 2018 17:54:59 +0800</pubDate><description><![CDATA[1.1经典生命周期分析

正常情况下Activity的生命周期: 
1)onCreate:表示Activity正在被创建,这是Activity生命周期的第一个方法,通常用于做初始化的一些工作,如setContentView加载布局xml文件,初始化Activity需要的数据等;

2)onRestart:表示Activity正在重新启动.为什么说是”重新”启动呢?.如果Acitivity是第一次创...]]></description><category></category></item></channel></rss>