Android
文章平均质量分 75
rocky-bull
这个作者很懒,什么都没留下…
展开
-
Gradle学习三 :AS自定义Gradle插件
一、定义插件1.File-New Module-Android Library,取名plugin12.删除plugin1目录下所有文件,只保留build.gradle编写build.gradle,代码如下:apply plugin: 'groovy'apply plugin: 'maven'dependencies { compile gradleApi()//gradle ...原创 2019-01-02 11:09:49 · 708 阅读 · 0 评论 -
hashmap 线程安全问题分析
1.问题引入开发过程使用了HashMap全局变量作为缓存HashMap<String, String> mCacheMap写(put)mCacheMap是线程R读(get)mCacheMap是线程WHashmap是非线程安全的集合类,在此场景中RW分属于两个不同线程,会存在读写数据不一致性问题。比如W线程正在更新HashMap过程中,R线程同时读取HashMap,由...原创 2018-06-23 23:48:44 · 5866 阅读 · 0 评论 -
静态代码分析学习
背景软件开发过程中,工程师需要花费大量的时间和精力修改代码缺陷。从下图可以看出,在软件开发过程中,测试成本随着设计构建、QA、系统集成阶段的发展在不断增加。因此工程师应该努力在设计开发阶段优化代码、定位修复代码缺陷,这样可以节省大量时间和人力成本。1 代码静态分析知识 【代码[静态分析](Program Static Analysis)是指在不运行代码的方式下,通过词法分析...原创 2018-03-28 09:25:55 · 6533 阅读 · 2 评论 -
Activity启动模式
1. standard每次启动会新建一个实例2. singleTop栈顶复用,只有任务栈里面有要启动的activity的实例,并且在栈顶,那么通过调用onNewIntent()直接复用这个实例;否则,重建一个新的实例。使用场景:适合收到通知弹出展示的activity,如果已经弹出一个界面以后,再有新通知到来可以避免重复创建。3. singleTask单例模式。只要全局任务栈中有要启动的activit原创 2017-10-18 15:03:20 · 283 阅读 · 0 评论 -
Android进程提高优先级
智能跑步机遇到如下问题: 正在跑步过程,运行视频软件,跑步机会停止。原因分析: 系统内存512m,比较小。运行优酷视频以后,内存占用较多,导致系统开始进入低内存回收资源状态。系统回收资源是按照adj优先级进行回收。解决办法:adb shell dumpsys activity --oom > e:oom.txt这样可以将进程adj打印到oom.txt文件中原创 2017-02-15 13:31:06 · 729 阅读 · 0 评论 -
Android 6.0 root命令
执行如下命令 :1. adb root2. adb disable-verity (最新的adb 工具包才支持adb disable-verity命令,如果是Linux开发环境,则可使用工程编译结果目录out/host双击查看原图nux-x86/bin下的adb执行文件) 3. adb reboot 重启设备 (只要不刷机,以上步骤执行一次就行) 4. adb root5.原创 2017-02-17 17:33:59 · 2227 阅读 · 0 评论 -
Android修改系统语言
private void updateLanguage(Locale locale) { try { IActivityManager iActMag = ActivityManagerNative.getDefault(); Configuration config = iActMag.getConfiguration();原创 2016-09-19 14:35:59 · 1013 阅读 · 0 评论 -
Ubuntu下使用genymotion
使用环境:ubuntu 14.04第一步:下载genymotion进入官网 www.genymotion.com ,注册帐号,下载Linux版本。chmod +x genymotion-2.2.2_x64.bin./genymotion-2.2.2_x64.bin -d /home/用户名安装完后,进入/home/用户名/genymotion目录,双击运行genymotion文件即可。如果出错,会提原创 2016-05-03 22:07:38 · 2055 阅读 · 3 评论 -
apk签名命令总结
1.查看apk的签名信息解压apk提取META-INF文件,得到CERT.RSA文件。 $ keytool -printcert -file META-INF/CERT.RSA2.查看keystore签名详细信息$ keytool -list -keystore debug.keystore 3.eclipse查看默认的debug签名信息路径如下:Windows/Preferense/Androi原创 2015-07-16 18:13:15 · 737 阅读 · 0 评论 -
Android圆环控件
Android圆环控件最近在做一个功能,界面效果要求如下:看到这个界面,我首先想到了以前在做phone模块的时候,我们定制的来电界面InCallTouchUi,界面效果是类似的。来电控件使用的是android原生代码,对应的代码地址在frameworks\base\core\java\com\android\internal\widget\multiwaveview。这个目录下面有两个来电效果的实现原创 2015-07-02 17:17:59 · 1285 阅读 · 0 评论 -
AirPlay Android接收端学习一 协议
一 AirPlay 接收端描述AirPlay是苹果的私有协议,苹果官方未开放api和sdk,目前相对权威的一份非官方协议文档。这篇文档详细描述了aiplay 服务发现、图片、音视频、镜像投屏的相关协议,给我们开发airplay设备提供了很好的参考。但是不足之处是文档已经有6年多时间没有更新过,对于IOS的新变化可能没有完全同步。在开发过程中我们可能会面临一些未知的坑,需要针对具体问题来逐一解决...原创 2018-07-08 17:43:16 · 8581 阅读 · 8 评论 -
Android app 配置文件使用分析
在安卓app开发中,常需要将一些数据放在配置文件,辅助程序开发和运行。依据数据复杂度、使用场景等条件,会存在不同种类的配置文件,比如最常见的xml文件,使用在Androidmanifest.xml,res资源定义等。其实除了xml之外还有其他格式的文件可以用作配置文件,比如json、properties等。下面来详细看一下:1.Properties文件常用于保存软件配置信息,类似has...原创 2018-07-18 23:53:30 · 4858 阅读 · 0 评论 -
安卓线程学习四 之 线程优先级和调度
一 问题思考安卓开发,如果想设置线程优先级有两种方法:1 Android sdk也提供一个设置线程优先级的方法2 Thread.java里面提供了设置线程优先级的方法这两个方法有什么区别,应该选择使用哪一个呢?二 线程优先级的原理2.1. android.os.process.java设置线程优先级源码分析/** * Set the priorit...原创 2018-08-07 10:08:51 · 3781 阅读 · 1 评论 -
Android Hook 一 Hook CloseGuard
一、抛出问题在上一篇 dalvik.system.CloseGuard 介绍了CloseGuard的原理和作用,并在文中提到APP端可以利用Hook REPORTER 在来实现客制化的上报提示信息本章通过代码来学一下怎样Hook这个REPORTER来定制上报信息功能。二、案例分析直接上代码:package com.peterzhang.androidhookdemo;impor...原创 2019-01-03 19:55:26 · 1940 阅读 · 1 评论 -
Android Surface显示系统框架一概览
基于Android7.1源码和相关资料画了APP UI绘制显示的大致框架。涉及安卓系统全栈内容:APP层framework层(WMS)native层(SurfaceFlinger)HAL层(hwcomposer/gralloc)包括了如下概念:进程通信组建:binder/Ashmem,作为模块之间沟通的桥梁,如果不清楚这两个实现机制,很难明白UI渲染如何从APP层发起请求经过...原创 2018-12-24 00:25:30 · 1069 阅读 · 2 评论 -
dalvik.system.CloseGuard 介绍
CloseGuard is a mechanism for flagging implicit finalizer cleanup of resources that should have been cleaned up by explicit close methods (aka “explicit termination methods” in Effective Java)大致意思就...原创 2018-12-28 08:39:01 · 4254 阅读 · 0 评论 -
Dalvik虚拟机内存碎片测试分析
《移动App性能评测与优化》第一章1.3.3介绍了优化Dalvik内存碎片。文中列举了一段代码,可能会在GC后引起内存碎片问题,代码如下:private Object result[] = new Object[100];void fool(){ for (int i = 0;i &amp;amp;lt; 100; i++){ byte[] tmp = new byte[2000];...原创 2018-12-05 10:02:29 · 306 阅读 · 0 评论 -
Android doze模式分析一
一、引言DOZE是安卓系统从6.0(API级别23)开始引入的对低电和应用待机模式的优化。具体介绍可以参考developers官方文档。阅读完官文后,思考几个问题:6.0之前,APP怎么处理可以让系统不休眠?6.0开始,系统如何解决APP不让系统休眠的问题?二、问题简答6.0之前,如果不希望APP运行过程系统休眠,可以通过在APP内申请PowerManager.WakeLock保证...原创 2018-11-25 00:58:28 · 2423 阅读 · 0 评论 -
Android native层发送广播
github代码地址原创 2018-11-06 17:47:13 · 2604 阅读 · 0 评论 -
安卓系统之线程学习-概要
安卓系统或应用开发,java多线程编程是非常重要也是比较难的一个知识点。掌握线程的实现原理、生命周期,合理的使用线程、线程池对于开发稳定、高效的程序是必须的基础。结合安装系统、应用开发实践,我们先思考下面几个常见的问题:安卓系统基于Linux实现,每一个java线程会对应一个pthread线程。每一个app在启动之后都会启动一个binder线程用于监听消息事件,安卓系统是基于消息驱动。...原创 2018-07-31 00:43:32 · 660 阅读 · 0 评论 -
安卓线程学习五 之 HelloWorld app运行时线程资源分析
一 抛出问题一个最普通的 HelloWorld app运行以后,总共会开启多少线程,这些线程分别是什么作用,线程的status是什么?二 分析helloworld app运行以后,打开Android Studio — Tools — Android — Android Device Monitor ,查看Threads信息,如图所示: 总共有14个线程2.1.虚拟机线...原创 2018-08-08 17:54:27 · 1901 阅读 · 0 评论 -
Android 图片阴影处理分析!
Android 图片阴影处理分析!最近在做一个Android位图阴影处理的效果,今天把思路总结一下:分析如下:Android sdk提供了BlurMaskFilter工具类可以给图片添加阴影效果,代码如下: —/** * This takes a mask, and blurs its edge by the specified radius. Whether or * or not to原创 2015-06-08 16:06:32 · 3216 阅读 · 0 评论 -
Android aapt介绍
Android aapt介绍什么是AAPT? 进入android-sdk-windows\platform-tools\目录,输入aapt,可以查看这个工具的具体描述:Android Asset Packaging ToolUsage: aapt l[ist] [-v] [-a] file.{zip,jar,apk} List contents of Zip-compatible ar原创 2015-05-15 09:57:18 · 679 阅读 · 0 评论 -
两个apk打包成一个apk发布
一、简介 前段时间miui6隆重发布,感觉很不错的样子。由于自己没用小米手机,所以要是尝鲜miui6只能使用别的方法,这个时候在应用商店看到了"小米系统"这个应用,下载下来后看到这个应用是miui的一个轻装版本,一个apk里面打包了如下基础应用:桌面、锁屏、通讯模块(短信、拨号盘、联系人)、云服务、应用商店,看到这种模式以后不得不对小米互联网产品思维表示佩服,单单91助手上下载量5原创 2014-11-06 21:00:15 · 3426 阅读 · 0 评论 -
Android 内存泄露 案例分析
实际开发中发现Android内存泄露问题很容易发生,下面大致是一些常犯的问题,希望大家引以为戒: 一、注册广播监听器,忘记反注册。registerReceiver(mReceiver, intentFilter)unRegisterReceiver(mReceiver, intentFilter)这两者出现的位置如下:onCreate ------ onDest原创 2013-12-22 15:52:02 · 2078 阅读 · 0 评论 -
AsyncQueryHandler 分析 缺陷
android系统封装了一些很好用的帮助类辅助应用程序开发,比如AsyncQueryHandler 可以用来异步操作数据库、AsyncQueryHandler 在多数情况下使用都不会有问题,但是在一些特殊场景下使用却是有局限的。这与AsyncQueryHandler 本身的代码设计师有关系的,下面我们从代码来看,AsyncQueryHandler 到底是怎么一回事?先看AsyncQ原创 2013-05-10 00:06:35 · 1225 阅读 · 0 评论 -
Andorid 好书籍推荐
老外的:1.《Apllication Security For Android Platform》主要内容:1.介绍了linux权限控制的原理,进而引入android权限控制的来历和原理。2.android权限机制在android四大组件上的使用3.android设备上存储数据的安全机制,讲解了加密方式,包括对称加密、非对称加密、hash算法等4.介绍了CS 客户服务端之间原创 2013-02-12 18:12:28 · 550 阅读 · 0 评论 -
android手机 加速度传感器 获取x,y,z轴上的加速度
package com.zhp.andorid;import android.app.Activity;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventLis原创 2012-10-22 19:51:46 · 12907 阅读 · 2 评论 -
android 消息机制 Handler Looper 原理分析
android消息机制总结1. 使用场景 Android启动后,会创建一个进程,以后所有的activity、service都在这个进程里面运行。启动初,该进程只包含一个线程,叫做UI主线程,负责处理UI界面的显示、更新。对于一些费时的操作,如查询、下载数据等不可以放到UI线程中,因为这可能会引起UI线程阻塞,导致系统崩溃。所以,这些费时操作需要单独启动一个子线程去处原创 2011-12-02 16:12:48 · 2239 阅读 · 0 评论 -
android TouchMode下的focus问题
今天试跑了"Google Android SDK开发范例大全源码里的EX04_02工程",发现mImageButton1.setOnFocusChangeListener这个监听器木有反应。查了很多资料发现原因是:在Android TouchMode模式下是不存在focus的。所谓的focus是指被选中的意思,类似于windows平台下单击一个文件夹后鼠标的焦点(focus原创 2011-06-10 00:30:00 · 1508 阅读 · 0 评论 -
Android常用调试命令、工具汇总 (一)命令篇
一、命令篇内存查看:使用场景:跟踪进程内存使用情况,看是否存在内存回收不了的问题,如果程序存在内存泄露问题,通过内存动态占用情况可以看出一些端倪。 ² 查看系统dalvik给每一个进程分配的可用内存情况:root@android:/ # getprop[dalvik.vm.heapgrowthlimit]: [192m] :进程最大可分配到192m 如果哪个进程超过这个值就原创 2014-01-17 13:42:09 · 1529 阅读 · 0 评论 -
Android MK 引入第三方jar包
1.引入第三方jar包原创 2014-04-20 15:30:17 · 1049 阅读 · 0 评论 -
Android编译环境常用的配置
一:编译源码不要生成odex 问题: 1: 禁止apk生成odex: 修改../build/core/package.mk LOCAL_DEX_PREOPT := ture -> LOCAL_DEX_PREOPT := false 2: 禁止jar包生成odex: 修改/build/core/java_library.mk LO...原创 2014-05-28 16:50:29 · 6601 阅读 · 0 评论 -
自己制作Android包含@hide接口的SDK
Android系统存在一些系统级应用与framework代码耦合较深,编译的时候依赖很多类里面的@hide接口,这类应用怎么来编译呢?首先我们需要制作一份包含Hide接口的SDK,方法如下(以android4.2.2版本为例): 1.下载4.2.2SDK包,然后从\sdk\platforms\android-17目录下取到android.jar。 2.从编译环境out/ta原创 2014-07-20 22:58:34 · 1906 阅读 · 0 评论 -
Android浏览器(PAD版)开发问题总结
1. 报错内容:Should not happen: no rect-based-test nodes found前提:浏览器首页采用 ViewPage + fragement+WebView形式实现,进入首页以后当前page内容可以被选中,当滑到viewpage下一页发现page内容无法被选中,打Log发现错误提示如上所示。分析:在当前页webview原创 2014-03-29 17:18:42 · 3315 阅读 · 1 评论 -
ListPopupWindow Overly透明遮罩效果
就是这样一个效果,点击button后尾随一个列表,这个列表内容 布局可以随意定制,并且列表弹出的时候整个activity加上一层透明遮罩。 弹出框列表实现:android.widget.ListPopupWindow这个控件可以实现弹出窗口的功能,并且弹出框的位置可以通过方法setAnchorView(view)设置跟随指定的view ,如上图即指定popupwindow跟随button原创 2014-04-12 13:12:54 · 4362 阅读 · 1 评论 -
Android 多分辨率机器适配
假设有如下分辨率机器:800 x 4801024 x 6001024 x 7681280 x 8001920 x 1200 2048 x 1536总共六种类分辨率机器,如果按照dp为单位来细分可以分为几种呢?首先通过context.getResources().getDisplayMetrics().density获取到当前机器的屏幕密度,然后通过dp = px/d原创 2014-05-17 17:10:20 · 1725 阅读 · 0 评论 -
String byte[] stream File之间的相互转换
public static InputStream stringTOInputStream(ByteString webpage) throws Exception { ByteArrayInputStream is = new ByteArrayInputStream( webpage.toByteArray()); return is; } public st原创 2014-04-20 16:10:22 · 830 阅读 · 0 评论 -
android上Bitmap获取的方法
<br /> //第一种获取bitmap的方式:通过BitmapFactory<br /> InputStream inStream = getResources().openRawResource(R.drawable.qinshi);<br /> Bitmap bmp = BitmapFactory.decodeStream(inStream);<br /> <br /> //第二种获取bitmap的方式<br /> InputStream inStream =原创 2011-06-02 10:56:00 · 1809 阅读 · 0 评论