- 博客(33)
- 资源 (2)
- 收藏
- 关注
原创 WindowManager解析(二)Android悬浮框无法弹出输入法的原因和无需权限显示悬浮窗
Android悬浮框无法弹出输入法最近要研究悬浮窗方面的东西,遇到一个问题,我的悬浮窗里面有一个输入框,但是不弹出输入法,后来找到一个方法:在WindowManager的实例获取方式不对,之前是这样获取的:mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);改这样:mWindowMana
2017-03-31 22:32:38 13453 9
原创 WindowManager解析(一)WindowManager和LayoutParams源码解析
源码/* 版权所有(C)2006 Android开源项目 根据Apache许可证2.0版(“许可证”)许可; 您不得使用此文件,除非符合许可证。 您可以获得许可证的副本 http://www.apache.org/licenses/LICENSE-2.0 除非适用法律要求或书面同意软件 根据许可证分发的分发是“按原样”的基础, 无明示或暗示的
2017-03-31 00:00:35 2395
原创 Android线程池(七)ExecutorService接口、Executor接口和ScheduledExecutorService接口的源码解析
ThreadPoolExecutor继承自AbstractExecutorService类,AbstractExecutorService类实现了ExecutorService接口,而ExecutorService类又继承自Executor接口。ScheduledExecutorService接口继承自ExecutorService接口。ExecutorService概念Executor 提供了管
2017-03-29 20:21:46 2269
原创 显示悬浮窗口
显示悬浮窗口可以使用WindowManager的addView方法,为了关闭应用能够继续运行,打开应用的时候开启一个Service,让Service去设置和打开悬浮窗口。WindowManager主要是使用3个方法:addView方法用于添加一个悬浮窗,updateViewLayout方法用于更新悬浮窗的参数,removeView用于移除悬浮窗。WindowManager.LayoutParams这
2017-03-28 20:23:21 3164
原创 Android线程池(六)AbstractExecutorService类源码解析
ThreadPoolExecutor继承了AbstractExecutorService,而AbstractExecutorService又实现了ExecutorService接口。所以,根据多态,ThreadPoolExecutor可以看作是ExecutorService类型。 示例首先来看一段使用示例 ExecutorService recmdService = Executor
2017-03-27 20:26:10 1415
原创 Android线程池(五)Executors类源码解析
概要 // 每次只执行一个线程任务的线程池 ExecutorService singleTaskExecutor = Executors.newSingleThreadExecutor();可以看出,ThreadPoolExecutor与Executors类关系是非常密切的。在开发并发程序时,我们可能或多或少都要用到线程池来复用线程以达到较高的性能,但是我们自己写的线程
2017-03-26 15:36:39 583
原创 文章目录
原创文章【66】 即拿即用-App启动优化最佳实践 【65】 反编译+混淆的攻守战 【64】 Android存储路径详细说明 【63】 即拿即用-横向滚动+转场动画+GridView和RecyclerView动态添加 【62】 Java内部类 【61】 即拿即用-仿IOS风格的弹出框和对话框 【60】 即拿即用-选择头像,可以选择相册,拍照,查看大图,保存到本地 【59】
2017-03-25 23:52:33 639 3
原创 Android线程池(四)ThreadPoolExecutor类源码解析
使用ThreadPoolExecutor private final int CORE_POOL_SIZE = 4;//核心线程数 private final int MAX_POOL_SIZE = 5;//最大线程数 private final long KEEP_ALIVE_TIME = 10;//空闲线程超时时间 private final int BLOCK_S
2017-03-25 23:32:51 1570
原创 Android线程池(三)常用封装
AsyncTask中的线程池配置 //获取当前的cpu核心数 private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); //我们想在核心池中至少有2个线程,最多4个线程,更喜欢有1个小于CPU计数的CPU,以避免CPU背景饱和 //线程池核心容量 pr
2017-03-25 00:23:25 3339
原创 Android线程池(二)构造方法的参数详细说明
构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFa
2017-03-23 23:58:34 1627
原创 Android线程池(一)简单使用
Android线程池hreadPoolExecutor是什么相当于一个容器,容纳的是Thread或者Runable为什么要使用ThreadPoolExecutor1、每一个线程都是需要CUP去分配的,如果总是需要new thread,那么会大量耗费CPU资源,导致应用运行变慢,甚至oom2、ThreadPoolExecutor可以减少销毁和创建的次数,每个工作线程可以重复利用,可执行多个任务3、可以
2017-03-22 23:54:15 7910
原创 AsyncTask源码解剖
这是我用google翻译的源码注释,并参考Android Asynctask与Handler的比较,优缺点区别,Asynctask源码加上一些注释源码/* * Copyright (C) 2008 The Android Open Source Project * 版权(C) 2008Android开源项目 * * Licensed under the Apache License, Ve
2017-03-22 00:22:36 345
原创 AsyncTask的使用
概念AsyncTask是一个抽象类,它是由Android封装的一个轻量级异步类,它的内部封装了两个线程池(SerialExecutor和THREAD_POOL_EXECUTOR)和一个Handler(InternalHandler),其中SerialExecutor线程池用于任务的排队,THREAD_POOL_EXECUTOR线程池才真正地执行任务,InternalHandler用于从工作线程切换到
2017-03-20 22:00:16 453
原创 再谈子线程-居然可以在非UI线程中更新UI
我们常常听到这么一句话:更新UI要在UI线程(或者说主线程)中去更新,不要在子线程中更新UI,而Android官方也建议我们不要在非UI线程直接更新UI。事实是不是如此呢,做一个实验:更新之前:代码:package com.bourne.android_common.ServiceDemo;import android.support.v7.app.AppCompatActivity;import
2017-03-19 12:55:07 2631
原创 IntentService,用完即走
IntentService IntentService,可以看做是Service和HandlerThread的结合体,在完成了使命之后会自动停止,适合需要在工作线程处理UI无关任务的场景。IntentService 是继承自 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作。当任务执行完后,IntentService 会自动停止,不
2017-03-18 12:36:36 20965 8
原创 HandlerThread(子线程也可以有消息传递机制)
知识点 HandlerThread,顾名思义,Handler+Thread,就是让子线程也能有一套和MainThread一样的Handler消息机制。HandlerThread本质上是一个线程类,它继承了ThreadHandlerThread有自己的内部Looper对象,可以进行looper循环通过获取HandlerThread的looper对象传递给Handler对象,可以在handleM
2017-03-17 21:39:11 2488
原创 Handler内部运转机制
原理 我们都知道,我们开启一个子线程的时候,会在子线程中使用主线程创建的Handler传递消息给主线程去处理,那么在Handler内部是怎么样的一种处理流程呢?主要步骤为: 1. 用户启动一个应用,系统内部建立一个进程。 2. 进程启动主线程Main Thread。 3. Main Thread通过Looper建立一个消息队列Message Queue。 4. 消息队列是存在于
2017-03-16 21:06:47 559
原创 开启多线程的姿势
多线程 作用:将耗时的任务放到子线程去执行,以保证UI线程的流畅性 子线程开启后,如果没有及时关闭,即使退出程序,子线程也一直会在后台运行,除非在应用管理强制关掉进程,才能完全关闭子线程。如何开启一个子线程: new Thread( new Runnable() { @Override
2017-03-15 21:21:41 1537
原创 Intent Filters大揭秘
Intent Intent:执行的操作以及用于这个操作的数据和其它属性,相当于网页中的url。如下图所示,在打开一个应用的时候,Intent是作为一个重要的数据载体的。下面来看看 Android OS 如何根据 Intent 来找到满足触发条件的 Activity,Service 或是Broadcast Receiver. 借用 SQL 数据库的概念可以更好的理解。SELECT (Activi
2017-03-14 20:13:27 624
原创 PackageManager解析
PackageManager:管理应用程序包功能:安装,卸载应用查询permission相关信息查询Application相关信息(application,activity,receiver,service,provider及相应属性等)查询已安装应用增加,删除permission清除用户数据、缓存,代码段等 使用方法:在Android中,为应用包的安装,删除各种操作服务的,是Packa
2017-03-13 21:02:10 11817 2
原创 神兵利器之Axure8.0基础进阶
切割/裁剪图片切割:可将图片进行水平与垂直的切割,将图片分割开。裁剪:可将图片中的某一部分取出。裁剪分为几种,分别是裁剪、剪切、和复制。其中:裁剪只保留被选择的区域;剪切是将选取的部分从原图中剪切到系统剪贴板中;复制是将选取的部分复制到系统剪贴板中,复制的方式对原图没有影响 添加条件判断在用例编辑界面中点击添加【条件按钮】进行添加条件。 比如:判断当前元件上的文字包含“@”。 用例条件
2017-03-13 01:36:42 749
原创 分词统计(四)唐宋元诗人吟诗作词的时候,最偏爱哪些词语呢?(附上AI写的1000句诗!)
要知道诗人们最偏爱哪些词语,需要统计诗词中的高频词,可以利用”讯飞分词”做一个大致的统计。 本次统计了唐诗320首,宋词300首,元曲300首,总共920首,分词总量为14353个。 之前听说过国外的人工智能可以自己写诗了,其实掌握了我们古代诗词的大数据,加上对语义的理解,套上算法,我们就可以自己写诗了!。文章的后面我会放上一些简单的AI写的诗。唐诗统计结果 分词总量67
2017-03-12 01:36:05 4010
原创 神兵利器之CSDN-MarkDown常用语法
前言CSDN Markdown编辑器是使用StackEdit修改而来的,但在StackEdit的基础上做了一些细节优化,使得体验更加友好区块效果: 区块实际上:>区块缩进方法1:把输入法由半角改为全角。 两次空格之后就能够有两个汉字的缩进 方法2:效果:半方大的空白 或 全方大的空白 或 不断行的空白格 或 实际上:半方大的空白 或 全方大的空白&em
2017-03-10 23:39:27 1080 3
转载 CSDN-Markdown原版教学
机器学习-机器视觉 学习心得本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl + Q
2017-03-10 23:27:50 532
原创 AndroidManifest解析以及权限详解
Manifest指定该Android应用的报名,该包名可用于唯一地标识应用<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mwf.analyze" android:sharedUserId="android.uid.system
2017-03-10 01:14:16 3961
原创 分词统计(三)导入导出数据
为了方便查看,添加了导出导入数据的功能,默认导出格式为".csv",位置位于SDCard的"DownLoad"目录下。效果图:文件操作代码package com.mwf.analyze.utils;import android.content.Context;import android.os.Environment;import android.widge
2017-03-09 00:40:30 770
原创 分词统计(二)读取TXT文件并统计数量
本篇将完成对词的统计,使用了讯飞语言云进行解析,还完成了对单个字使用的统计,统计完成可以一键导出数据到sdcard根目录下进行查看。大概的步骤如下:词的统计1、读取文件文字2、因为讯飞语言云对一段文字不能超过70个分词,所以需要对数量进行分组3、每分一组启动一个IntentService进行网络请求4、网络请求完毕对文字进行筛选,保存到数据库5、所有的网络请求完成后显示
2017-03-08 00:17:35 1593
原创 分词统计(一)使用讯飞语言云进行统计
最近想取一个网名,想起中国文化博大精深,如果用古代的唐诗宋词组合一定有一个意向不到的名字。组合首先要分词,想起锤子手机有一个很火的功能叫BigBang,它用的是讯飞的语言云,是免费提供的,所以这次使用讯飞的语言云进行分词,然后随机组合。另外,还可以进行有趣的数据统计,看看古代的高频诗词是哪些?大概的步骤如下:1、获取讯飞语言云ApiKey2、搭建网络请求3、选择诗词的txt文件
2017-03-06 21:35:51 1655
原创 Android存储路径大全
一、存储的分类Android的存储路径实际分类为内部存储路径内部缓存存储路径外部存储路径外部缓存存储路径在有些手机上,系统也会在内部划出一个内部的SDCard路径和内部存储路径,所以当有SDCard的时候,就会有6个路径存在了那么存储路径和缓存存储路径的区别就是:1、缓存路径一般用于存放一些缓存数据,当程序删除的时候,缓存文件夹也会随之删除,
2017-03-06 00:48:11 22705
原创 不用AIDL,我用Messenger
进程通信有两种方式:1使用AIDL2使用MessengerMessenger是一种基于消息的通信方式,主要核心是通过Handler和Message机制来通信。客户端会发送一个Message给服务端,服务端的Handler经过处理,又发送一个Message给客户端,客户端的Handler进行处理。下面是一个Messenger的例子。服务端package com.iii
2017-03-05 01:48:36 517
原创 AIDL解析(二 )让Service主动调起Activity吧!
在上一篇文章《AIDL解析(一)两个应用之间使用AIDL进行通信的例子》中,我们学会了Activity如何向Service传递数据,但是Service却不能主动向Activity传递数据,比如说我们想让Service开启一个线程,每隔五秒传递一个消息给Activity,应该怎么做呢?这就要用到回调机制了。效果图:如图所示,我们要的效果是Client客户端会主动接收到Service的
2017-03-04 00:57:29 1346
原创 AIDL解析(一)两个应用之间使用AIDL进行通信的例子
IPC(Inter-Process Communication) :指进程间通信 ,指至少两个进程或线程间传送数据或信号的一些技术或方法桌面应用Launcher是用Binder IPC启动应用,而进程与进程之间的交流,就是使用AIDL了。不单单是进程与进程之间可以用AIDL,Service和组件之间不但可以用Messenger来通信,也可以用AIDL来通信。使用Messenger更简单,核心是
2017-03-02 21:41:26 7607 6
原创 WindowManager解析
WindowManager是什么首先来看一张Android架构图,我们会发现WindowManager是属于Application Framework层的,即应用程序框架层,这一层的定义是:这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的结构设计,但是必须要遵守其框架的开发原则。WindowManager就是其中一
2017-03-02 00:47:39 1029
apktool工具
2017-08-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人