<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[coder0408的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/coder0408</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; coder0408]]></copyright><item><title><![CDATA[OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.c]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/125645810</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/125645810</guid><author>coder0408</author><pubDate>Wed, 06 Jul 2022 18:54:33 +0800</pubDate><description><![CDATA[OpenJDK 64-Bit Server VM warning: Archived non-system classes are disabled because the java.system.class.loader property is specified ]]></description><category></category></item><item><title><![CDATA[找出一个数组的长度Top k的升序子数组]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/119797151</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/119797151</guid><author>coder0408</author><pubDate>Thu, 19 Aug 2021 11:05:11 +0800</pubDate><description><![CDATA[找出一个数组的长度Top k的升序子数组，并按长度降序输出
输入：[2,1,4,5,8,3,7,10,2,5] k=2
输出：[1,4,5,8],[3,7,10]
字节面试题，面试时有大概的思路没有写出来，结果可想悲催了
下面时自己的实现思路，抛个砖，大神有好的解法，欢迎交流
public List&lt;List&lt;Integer&gt;&gt; getTopKArray(int[] array, int k){
        if(array == null){
            retur]]></description><category></category></item><item><title><![CDATA[消息处理机制之消息处理]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104998374</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104998374</guid><author>coder0408</author><pubDate>Fri, 20 Mar 2020 20:54:25 +0800</pubDate><description><![CDATA[要分析消息处理的流程，我们需要从Looper类的loop方法开始。
frameworks/base/core/java/android/os/Looper.java
public static void loop() {
        final Looper me = myLooper();
        final MessageQueue queue = me.mQueue;

    ...]]></description><category></category></item><item><title><![CDATA[消息处理机制之消息发送]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104203819</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104203819</guid><author>coder0408</author><pubDate>Thu, 06 Feb 2020 22:50:14 +0800</pubDate><description><![CDATA[我们通过handler发送消息一般会通过调用Handler类的sendMessage方法，下面就从sendMessage开始分析消息发送的过程。基本的流程如图所示。

源码分析 sendMessage为例分析
frameworks/base/core/java/android/os/Handler.java
public final boolean sendMessage(Message msg)...]]></description><category></category></item><item><title><![CDATA[消息处理机制之消息队列]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104166767</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104166767</guid><author>coder0408</author><pubDate>Tue, 04 Feb 2020 11:15:06 +0800</pubDate><description><![CDATA[Android中消息处理机制主要围绕消息队列来实现的。一个线程拥有一个消息队列之后，就可以进入到一个消息循环中，同时其他线程以及线程本身可以往这个消息队列发送消息，以便在这个消息被处理时执行一个特定的操作。
Android系统主要是通过MessageQueue、Looper和Handler三个类实现消息处理机制的。其中MessageQueue来描述消息队列；Looper类用来创建消息队列以及消息循...]]></description><category></category></item><item><title><![CDATA[消息处理机制之消息循环]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104163333</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104163333</guid><author>coder0408</author><pubDate>Mon, 03 Feb 2020 22:57:05 +0800</pubDate><description><![CDATA[Android引用程序的消息队列创建完成之后，就会调用Looer类的loop()方法，进入到一个消息循环中。

按照流程图分析android源码的调用过程

Looper:loop()
frameworks/base/core/java/android/os/Looper.java

public static void loop() {
        final Looper me = myL...]]></description><category></category></item><item><title><![CDATA[根Activity启动过程]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104069026</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104069026</guid><author>coder0408</author><pubDate>Wed, 22 Jan 2020 12:12:55 +0800</pubDate><description><![CDATA[一、概述
从应用程序的角度出发，Activity的启动过程分为两种：一种是根Activity,另一种是子Activity。根Acitivity是launcher中以快捷图标的的形式启动，它的启动过程代表了一个Android应用程序的启动过程。子Activity由根Activity启动或有其他子Activity启动，它们可能与启动它们的Activity运行在同一个进程中也可能运行在不同的进程中，这取...]]></description><category></category></item><item><title><![CDATA[线程之间的协作]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104054263</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104054263</guid><author>coder0408</author><pubDate>Mon, 20 Jan 2020 17:14:23 +0800</pubDate><description><![CDATA[一、概览
在线程之间共享受限资源中，通过使用锁(互斥)来同步两个任务的行为，从而使得一个任务不会干涉另一个任务的资源。线程之间的协作使得多个任务可以一起工作去解决某个问题。现在问题不是彼此之间的干涉，而是彼此之间的协调，因为在这类问题中，某些部分必须扎其他部分被解决之前解决。
任务协作的关键是通过任务之间的握手，握手也是通过互斥这个基础特性来实现。互斥能够确保只有一个任务可以响应某个信号，这样就可...]]></description><category></category></item><item><title><![CDATA[外观模式]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/104042198</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/104042198</guid><author>coder0408</author><pubDate>Sun, 19 Jan 2020 16:22:03 +0800</pubDate><description><![CDATA[一、概览
将从以下几个方面了解外观模式

Facade模式是什么，用在何处
Facade模式的关键特征
Facade模式的变体

二、简介
《设计模式》一书对Facade模式的意图叙述：
为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口，使使子系统更加容易使用。
三、特征
Facade模式提供了一组容易理解的方法，这些方法使用底层系统来实现新定义的函数。




特征
...]]></description><category></category></item><item><title><![CDATA[View事件分发]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103990830</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103990830</guid><author>coder0408</author><pubDate>Wed, 15 Jan 2020 15:52:18 +0800</pubDate><description><![CDATA[View中消息的传递
对于一颗View树，它的消息的传递是自上而下，即从根节点开始逐层往子类递归传递的。在消息传递的过程中，一旦有View处理了这个消息，那么传递即宣告终止。从这一点看View树的上层有消息的优先处理权。
一、View中TouchEvent的投递流程
事件的处理是通过多种形式的InputStage来分别处理，如NativePostImeInputStage、ViewPostImeI...]]></description><category></category></item><item><title><![CDATA[View的绘制流程]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103907667</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103907667</guid><author>coder0408</author><pubDate>Thu, 09 Jan 2020 14:36:03 +0800</pubDate><description><![CDATA[一、View的绘制基础

MeasureSpace
Android官方给的解释MeasureSpecs are implemented as ints to reduce object allocation. This class is provided to pack and unpack the &lt;size, mode&gt; tuple into the int.

MeasureSp...]]></description><category></category></item><item><title><![CDATA[终结任务]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103847925</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103847925</guid><author>coder0408</author><pubDate>Sun, 05 Jan 2020 21:36:32 +0800</pubDate><description><![CDATA[一、通过条件判断退出任务
任务通过判断boolean值来确定何时终止它自己
实例代码：
public class OrnamentGarden{
    public static void main(String[] args) throws InterruptedException {
        ExecutorService service = Executors.newCachedT...]]></description><category></category></item><item><title><![CDATA[WebView常见漏洞修复]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103844440</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103844440</guid><author>coder0408</author><pubDate>Sun, 05 Jan 2020 16:27:41 +0800</pubDate><description><![CDATA[一、WebView中，主要漏洞有三类

任意代码执行漏洞
密码明文存储漏洞
域控制不严格漏洞
二、具体分析

2.1 WebView任意代码执行漏洞
出现该漏洞的三个：

WebView中addJavascriptInterface()接口
WebView 内置导出的 searchBoxJavaBridge_对象
WebView 内置导出的 accessibility 和 accessibilit...]]></description><category></category></item><item><title><![CDATA[Web与JS交互]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103787610</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103787610</guid><author>coder0408</author><pubDate>Tue, 31 Dec 2019 18:46:19 +0800</pubDate><description><![CDATA[Android通过WebView与JS交互Android调用JSJS调用android
一、Android通过WebView与JS交互
1.1、android通过WebView调用js代码方法有2中：

通过WebView的loadUrl()
通过WebView的evaluateJavascript()

1.2、JS通过WebView调用android代码的方式有3中：

通过WebView的a...]]></description><category></category></item><item><title><![CDATA[共享受限资源]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103779581</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103779581</guid><author>coder0408</author><pubDate>Tue, 31 Dec 2019 11:09:16 +0800</pubDate><description><![CDATA[一、解决共享资源竞争
1、原因：
我们永远不知道一个线程何时在运行。比如你坐在桌子边，正要去叉盘子中的最后一片实物，都够着它时，突然这片食物消失了，因为你的线程被挂起，另一个用餐者坐下并吃掉了它。
2、解决方式：
当一个资源被一个任务使用时，在其上加锁。第一个访问某项资源的任务必须锁定这项资源，是其他任务在被 解锁之前无法访问它，其被解锁之时，另一个任务就可以锁定这项资源并使用它。
方案：
基本上...]]></description><category></category></item><item><title><![CDATA[基本的线程机制]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103779558</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103779558</guid><author>coder0408</author><pubDate>Tue, 31 Dec 2019 11:08:34 +0800</pubDate><description><![CDATA[线程是比进程更轻量级的调度执行单位，各个线程既可以共享进程资源（内存地址、文件IO），又可以独立调度（线程是CPU调度的最小单元）。
多进程和多线程的区别：
1、本质区别在于每个进程拥有自己一整套变量，线程则是共享数据。因此共享变量使线程之间的通信比进程之间的通信更有效、更容易。
2、与进程相比较，线程更“轻量级”，创建、撤销一个线程比启动新进程的开销要小的多。
一、定义任务
1）通过实现Runn...]]></description><category></category></item><item><title><![CDATA[WebView常用方法]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/103779445</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/103779445</guid><author>coder0408</author><pubDate>Tue, 31 Dec 2019 11:04:08 +0800</pubDate><description><![CDATA[一、简介
WebView是一个基于webkit引擎、继承自View，用于展现web页面的控件。
Android的Webview在低版本和高版本采用了不同的webkit版本内核，4.4后直接使用了 Chromium。更改后会提升WebView性能，并支持HTML5,CSS3和JavaScript的标准已匹配最新的Web浏览器。
二、使用介绍

WebView类常见方法
WebView工具类WebSe...]]></description><category></category></item><item><title><![CDATA[通过服务启动消息通知]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/48549607</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/48549607</guid><author>coder0408</author><pubDate>Fri, 18 Sep 2015 17:42:18 +0800</pubDate><description><![CDATA[在Android实例代码中，一个通过服务来启动消息通知的damo,代码比较简单


public class NotifyService extends Service {
private ConditionVariable mCondition;//控制消息线程
private NotificationManager mNN;//消息管理器

@Override
public v]]></description><category></category></item><item><title><![CDATA[android.view.WindowManager$BadTokenException & Android – Displaying Dialogs From Background Threads]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/48490283</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/48490283</guid><author>coder0408</author><pubDate>Wed, 16 Sep 2015 10:28:34 +0800</pubDate><description><![CDATA[android.view.WindowManager$BadTokenException & Android – Displaying Dialogs From Background Threads


    使用线程子在后台处理一些繁重的和耗时的操作是非常标准的。后台线程结束后通常你可能会使用对话框提示或通知用户。
    对话框是在主线程中产生的，因此你可以在子线程对应的Handle]]></description><category></category></item><item><title><![CDATA[ListView下拉刷新]]></title><link>https://blog.youkuaiyun.com/coder0408/article/details/46710551</link><guid>https://blog.youkuaiyun.com/coder0408/article/details/46710551</guid><author>coder0408</author><pubDate>Wed, 01 Jul 2015 15:09:38 +0800</pubDate><description><![CDATA[ListView下拉刷新是在开发过程中经常用到的一个功能，整理如下，如果初学者有需要可以作为参考。
下拉刷新头部布局如下：
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="ma]]></description><category></category></item></channel></rss>