android进阶之爬坑
zhuawalibai
起点和过程共同决定终点
展开
-
android 使用AspectJ,代码注入到依赖项目异常
上次笔记中解决android使用aspectj,无法注入代码到依赖项目中。本以为问题解决了,发布release版本的时候,另一个问题出现了,导致业务全部无法正常使用。解压apk反编译class.dex查看class文件,代码确认已经注入进去了。但是执行的结果完全不是预期的结果,注入的代码发现有缺少的也有多余的,完全混乱了。解决:修改proguard-rules.pro(ProGua原创 2018-01-04 11:44:30 · 1891 阅读 · 0 评论 -
解决strings.xml格式化占位符错误: Multiple substitutions specified in non-positional format
一、错误描述我的string.xml中是这样写的:name="module_map_camera_status">设备状态:%s 设备类型:%s之前一直都是正常的,今天突然报错了二、问题原因查后发现是string.xml中的 %s 导致编译失败,应该把%s 改成%1$s、%2$s的形式name="module_map_camera_st原创 2017-12-29 14:05:36 · 2058 阅读 · 0 评论 -
android 使用AspectJ,代码无法正常注入到依赖项目中
使用AspectJ在Android中实现Aop配置比较麻烦,所以项目里用的是大神hujiang封装好的SDK,配置比较简单。github地址:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx 引入aspectjx后,在app中创建自定义注解@DigestTrace和DigestTr原创 2017-12-20 17:10:38 · 3782 阅读 · 6 评论 -
Android MediaSession架构分析
Android5.0 提出了全新的MediaSession概念用于播放器与控制器之间进行交互,它取代之前的RemoteControlClient,并提供了更为灵活的客户端受控端模型,下面是它的架构图: 其架构主要分为3大部分:1. 受控端(播放器):播放器需要创建MediaSession,创建的时候就类似于在系统注册了它,并告诉系统它可以被其他控制端所控制。2. framework(中介):受控端...转载 2018-04-09 11:26:42 · 1109 阅读 · 0 评论 -
Android QQ音乐/酷狗音乐锁屏控制实现原理,酷狗锁屏
混乱的锁屏控制Android自4.0版本, 也就是API level 14开始, 加入了锁屏控制的功能, 相关的类是RemoteControlClient, 这个类在API level 21中被标记为deprecated, 被新的类MediaSession所替代. 我们的音乐App中最开始使用的是原生锁屏控制API, 说实话这个API不好用, 遇到了一些小坑, 最要命的是不同品牌的手机, 锁屏界面...转载 2018-04-09 15:18:53 · 2961 阅读 · 4 评论 -
Android:图解四种启动模式 及 实际应用场景解说
在一个项目中会包括着多个Activity,系统中使用任务栈来存储创建的Activity实例,任务栈是一种“后进先出”的栈结构。举个栗子,若我们多次启动同一个Activity。系统会创建多个实例依次放入任务栈中。当按back键返回时,每按一次,一个Activity出栈,直到栈空为止。当栈中无不论什么Activity。系统就会回收此任务栈。上面这个样例中的Activity并没有设置启动模式,你会发现多...转载 2018-03-27 19:50:28 · 834 阅读 · 0 评论 -
Android RecyclerView 使用完全解析 体验艺术般的控件
原文链接:https://blog.csdn.net/lmj623565791/article/details/45059587本文出自:【张鸿洋的博客】概述RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridVi...转载 2018-03-27 19:55:28 · 801 阅读 · 1 评论 -
android adb push 与 adb install的比较(两种安装APK的方法)
一般的,Android 应用程序有两种安装方法:1. 将应用程序的apk文件push到手机中,用如下命令: adb push xxxx.apk /system/app.2. 用adb install xxxx.apk进行安装3. 二者的比较以及注意事项: 1) 用第一种方式的弊端: a. 会将原来系统中的对应的apk覆盖掉,所以,最好先备份出来一份,用如下命令: ...转载 2018-04-03 16:35:34 · 1264 阅读 · 0 评论 -
关于ProgressBar的美化问题
Android自带的ProgressBar其实也算不上丑陋,但是如果所有的App都使用一个模式的ProgressBar,那么估计用户就要崩溃了,打开任何一个App,擦,进度条都一模一样。。有鉴于此,我们今天就来谈谈ProgressBar的美化问题。学会了ProgressBar的美化,那么SeekBar和RatingBar的美化应该就不在话下了,因为SeekBar和RatingBar都是继承自Pro...转载 2018-04-12 17:21:50 · 768 阅读 · 0 评论 -
RenderScript 让你的Android计算速度快的飞上天!
在上一篇文章Android自动手绘,圆你儿时画家梦! 中结尾提到,我将介绍提升轮廓提取速度相关内容,今天一起学习Android中的RenderScript。看完本文,你将学会如何使用并行计算技术,提高你的app中计算模块速度,尤其是提升图像处理中的复杂计算。 RenderScript介绍根据Android官方网站的介绍:RenderScript是Android平台上用于运行计算密集任务的框架。Re...转载 2018-04-23 10:50:38 · 205 阅读 · 0 评论 -
Android高级模糊技术学习
今天我们来更深入了解一下Android开发上的模糊技术。我读过几篇有关的文章,也在StackOverFlow上看过一些相关教程的帖子,所以我想在这里总结一下学到的东西。为什么学习这个模糊技术?现在越来越多的开发者喜欢在自定义控件的时候加上各种模糊背景,看看RomanNurik开发的Muzei或者Yahoo的Weather应用app都非常不错。我非常喜欢他们的设计。我从Mark Allison的帖子...转载 2018-04-23 14:56:21 · 641 阅读 · 0 评论 -
Android中pendingIntent的深入理解
pendingIntent字面意义:等待的,未决定的Intent。 pendingIntent对象,使用方法类的静态方法 : getActivity(Context, int, Intent, int)------->跳转到一个activity组件、 getBroadcast(Context, int, Intent, int)------>打开一个广播组件 g...转载 2018-04-13 17:23:17 · 1489 阅读 · 0 评论 -
android如何给整个视图view圆角显示
关于如何给一个view设置圆角,有哪些方法呢? 1.给该view设置一个圆角的背景,这是最常见的用法。如以下代码:round_bg.xml<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/a...转载 2018-04-20 10:08:46 · 9483 阅读 · 1 评论 -
Android SVG to VectorDrawable
第一步:使用chrome浏览器打开网址:http://oss.chengxingyao.cn/svg2android/index.html如下图:第二步:使用编辑器或者浏览器打开.svg格式的图片,如下,基本格式应该都差不多:<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"&g...原创 2018-04-20 10:29:14 · 790 阅读 · 0 评论 -
Android实现毛玻璃效果
先定义BlurringView:public class BlurringView extends View { public BlurringView(Context context) { this(context, null); } public BlurringView(Context context, AttributeSet attrs) { ...原创 2018-04-20 10:37:32 · 2158 阅读 · 0 评论 -
android Rect类的使用
今天,讲讲Android的Rect类的使用。public final class Rectextends Objectimplements Parcelablejava.lang.Object ↳android.graphics.RectPublic Constructors Rect()Create a new empty Rect. Rect(int left, int top, int ...转载 2018-04-20 14:38:05 · 627 阅读 · 0 评论 -
Android中消息系统模型和Handler Looper
Android中消息系统模型和Handler Looper 作为Android中大量使用的Handler,结合Thread使其具有众多的使用形式和方法,让我一时感觉这个东西有些玄乎,不明所以然,这到底是一个什么样的存在呢?通过网上资料和源码的学习,这个Handler也差不多弄清楚了,现在总结下这个学习结果。 一 Handler作用和概念通过官方文档了解到Handler的大致概念是: Handl...转载 2018-04-20 17:00:35 · 209 阅读 · 0 评论 -
什么是AIDL
AIDL:Android Interface Definition Language,即Android接口定义语言。Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样...原创 2018-05-09 13:19:06 · 584 阅读 · 0 评论 -
Android 中AIDL的使用
AIDL的使用:最常见的aidl的使用就是Service的跨进程通信了,那么我们就写一个Activity和Service的跨进程通信吧。 首先,我们就在AS里面新建一个aidl文件(ps:现在AS建aidl不要求和java包名相同了):package aidl;interface IMyInterface { String getInfor(String s);}1234可以看到,在这...转载 2018-05-09 13:21:24 · 127 阅读 · 0 评论 -
简单理解Binder机制的原理
一、概述Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案。当然也存在部分其他的IPC方式,如管道、SystemV、Socket等。那么Android为什么不使用这些原有的...转载 2018-05-09 13:44:58 · 197 阅读 · 0 评论 -
Android 直接播放系统提示音
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);Ringtone rt = RingtoneManager.getRingtone(getApplicationContext(), uri);rt.play();原创 2018-05-09 14:26:22 · 6514 阅读 · 0 评论 -
Android 进程保活方式之定时器和系统广播
在系统安全管家清理内存的时候,第三方应用很容易被干掉。如果不想被杀怎么办?最有效的解决办法是:诱导用户把你的应用加入白名单。但是不是所有用户都会乖乖听你的话。这就需要我们采取其他手段,想方设法再次把进程启动。今天介绍两种常用的方法,可以让进程被杀后还有复活的希望。一、定时器说到定时器,我们最先想到的肯定是 AlarmManager,利用它可以完成定时任务。具体用法我在这里就不细说了,只讲讲在进程拉...转载 2018-05-11 14:34:35 · 1565 阅读 · 1 评论 -
Android 任务调度JobScheduler
任务调度App除了通过屏幕向用户展示可交互的界面元素之外,还经常需要在后台做些背地里做的事情,比如说精密计算、文件下载、统计分析、数据导入、状态监控等等,这些用户看不到的事一般放在Service中处理。然而有时候我们希望在特定情况下再启动事务,比如说延迟若干时间之后,或者等手机空闲了再运行,这样一方面不会在系统资源紧张之时喧宾夺主,另一方面也起到削峰填谷提高系统效率的作用。对于这些额外的条件要求,...转载 2018-05-11 14:36:12 · 888 阅读 · 0 评论 -
android:configChanges属性总结
android中的组件Activity在manifest.xml文件中可以指定参数android:ConfigChanges,用于捕获手机状态的改变。在Activity中添加了android:configChanges属性,在当所指定属性(Configuration Changes)发生改变时,通知程序调用onConfigurationChanged()函数。设置方法:将下列字段用“|”符号分隔开...转载 2018-05-07 09:32:27 · 278 阅读 · 0 评论 -
Android,跳过开机向导 SetupWizard
SetupWizard完成后会把下面两个设置的值由0改为1。USER_SETUP_COMPLETEDEVICE_PROVISIONED然后下次开机只要USER_SETUP_COMPLETE不为0就不会再进入SetupWizard。所以用adb把这两个值改为1重启后就可以跳过SetupWizard。adb shell settings put secure user_setup_complete 1...转载 2018-05-07 09:35:28 · 28164 阅读 · 1 评论 -
Android 颜色渐变(gradient)的实现总结
前言日常Android开发中,有很大一部分需要使用到渐变色,有时候UI会给我们提供一套对应的图片资源,这样我们直接使用就可以了,当然我们也可以自己通过代码实现颜色渐变:一、XML实现颜色渐变比较简单的一种方式实现颜色渐变,我们通过定制一个对应的shape文件,配置其属性之后,直接作为android:background赋值给对应的View即可。1.创建XML文件在你的drawable文件夹下创建s...转载 2018-06-22 10:00:40 · 9057 阅读 · 0 评论 -
自定义控件之圆形颜色渐变进度条--SweepGradient
前几天在群里面有人找圆形可颜色渐变进度条,其中主要的知识点是SweepGradient;(要看具体需要的渐变效果,LinearGradient线性渐变也是可以的,例如Settings内的电量界面的圆形电量进度WrapCircleVIew) mSweepGradient = new SweepGradient(240, 360, new int[] { Color.CYAN, Color.D...转载 2018-06-22 10:06:08 · 1245 阅读 · 1 评论 -
Android margin的负值的使用
控件的margin属性是用来控制控件之间的间距,那么当两个控件需要重叠时该如何进行布局呢?最常用的做法是使用FrameLayout帧布局,但是帧布局不能像LinearLayout能设置比重layout_weight灵活。如果要使用LinearLayout布局的灵活性,又要使控件进行重叠,这时就可以使用margin的负值来进行处理重叠。例子:布局:<LinearLayout xmlns:and...转载 2018-07-03 10:11:35 · 1484 阅读 · 0 评论 -
【AndroidManifest.xml详解】Manifest属性之sharedUserId、sharedUserLabel
android:sharedUserId当APK安装的时候,userid这个标志就会产生。APK在设备上的整个生命周期中,这个ID不再改变。不同设备上同一个应用包可能有不同的userid,重要的是在给定的设备上,每个应用包有自己独立的userid。userid的特点:1. 作为APK身份的标识 2. userid对应一个Linux用户,所以不同APK(用户)间互相访问数据默认是禁止的. 那么不同A...转载 2018-07-03 10:13:40 · 151 阅读 · 0 评论 -
Android编译版本eng、user和userdebug的区别
Android编译版本eng、user和userdebug的区别:一、Android官网的解释eng This is the default flavor. A plain make is the same as make eng.* Installs modules tagged with: eng, debug, user, and/or development.* ...转载 2018-07-18 10:43:56 · 2281 阅读 · 0 评论 -
adb shell下查看sqlite数据库
adb shell下查看sqlite数据库 有时需要查看应用的本地数据库是否改变,一般可以使用SqliteStudio来查看(需要把xx.db文件导出来).现在记录一下如何在adb shell 下面查看sqlite 数据库的内容.Android 把数据都存在在/data/data/下面.如果我们需要查看那个应用的数据库内容,就进入到这个应用的包名的目录.然后进入里面的 d...转载 2018-07-18 14:14:03 · 606 阅读 · 0 评论 -
FontFamily 看这里就够了
TextView中字体设置typeface一、配置设置代码方式设置fontFamily文字如何实现加粗、斜体?三者之间的关系自定义字体参考:TextView中字体设置textView中有三个属性可以设置字体textStyle:设置样式fontFamily:设置使用的字体typeface:设置使用的字体文件。textStyle 如下样式NORMAL:默认字体;BOLD...转载 2018-07-12 14:56:50 · 2327 阅读 · 0 评论 -
android N 捆绑通知
原文链接 : Notifications in Android N原文作者 : Ian Lake 译文出自 : 掘金翻译计划 译者 :DeadLion 校对者:danke77, xcc3641Android 通知往往是应用和用户之间至关重要的交互形式。为了提供更好的用户体验,Android N 在通知上做出了诸多改进:收到消息后的视觉刷新,改进对自定义视图的支持,扩展了更加实用的直...转载 2018-07-30 15:35:14 · 578 阅读 · 0 评论 -
Android View生命周期
Android View生命周期 onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure(int, int) 确定所有子元素的大小 onLayout(boolean, int, int, int, int) 当View分配所有的子元素的大小和位置时触发 onSizeChanged(int, int, int, in...转载 2018-07-30 15:36:51 · 1188 阅读 · 0 评论 -
Android 监听系统媒体音量变化
在做 SAPA 适配时由于其直连驱动层不经过 Android 的音量增益控制,所以调节系统媒体音量对音量改变无效。现要调节系统音量时也可以控制播放的音量,那么就需要监听系统音量变化,然后转换成增益给输出数据乘以对应比率从而实现对音量的控制。一般监听音量多是监听手机物理音量按键的点击事件,但是在音量控制面板拖动音量条改变音量就无法监听。那么我们需要分析无论是按音量键还是拖动音量条,系统都做了什么...转载 2018-07-30 15:38:00 · 4157 阅读 · 0 评论 -
android Rect类的使用
今天,讲讲Android的Rect类的使用。 public final classRectextends Objectimplements Parcelablejava.lang.Object ↳ android.graphics.Rect Public Constructors Rect() Create a new empty Re...转载 2018-07-30 16:28:03 · 1259 阅读 · 0 评论 -
RecyclerView机制解析: ItemDecoration
RecyclerView的ItemDecoration机制相对比较简单,不过扩展性很强,在ChildView的测量和展示上为使用者提供了极大的发挥空间,像divider/项目高亮/项目边框等效果都可以轻松实现 ItemDecoration可以同时存在复数个,维护在一个列表中,影响是可以叠加的,ItemDecoration的作用顺序从列表头到列表尾。 addItemDecorati...转载 2018-07-27 16:49:38 · 605 阅读 · 0 评论 -
RecyclerView之ItemDecoration各种效果
译文的GitHub地址:RecyclerView之ItemDecoration由浅入深译者注:RecyclerView第一篇,希望后面坚持下来RecyclerView没有像之前ListView提供divider属性,而是提供了方法recyclerView.addItemDecoration()其中ItemDecoration需要我们自己去定制重写,一开始可能有人会觉得麻...转载 2018-07-27 17:00:52 · 2705 阅读 · 1 评论 -
Android六大进程间通信方式总结之一:基本知识
Android六大进程间通信方式总结之一:基本知识因为不同进程都是享有独立资源的,所以全局变量这些都是无效的,必须有其他的进程间通信方式。 一、基本知识 1:怎样使用多进程Android正常使用的多进程的办法只有一种,就是在Service或Activity的属性里面设置remote属性这样,我们打开Main2Activty的时候,该活动或服务就会以一个新的进程来创建...转载 2018-08-02 19:59:10 · 438 阅读 · 0 评论 -
深入理解Android壁纸
本章主要内容: 讨论动态壁纸的实现。 在动态壁纸的基础上讨论静态壁纸的实现。 讨论WMS对壁纸窗口所做的特殊处理。 本章涉及的源代码文件名及位置:WallpaperManagerService.javaframeworks/base/services/java/com/android/server/WallpaperManagerService.javaWa...转载 2018-08-16 17:17:37 · 2058 阅读 · 0 评论