Android学习
文章平均质量分 65
天花板之恋
在coding的路上
展开
-
keystore相关问题
1.SHA1和公钥的区别SHA1是一种哈希算法,用于将任意长度的数据映射为固定长度的数据,通常是160位。SHA1可以用于验证数据的完整性,例如在数字签名中。SHA1算法已经被认为不够安全,不再推荐使用,应该使用更安全的哈希算法,例如SHA-256或SHA-3。公钥是一个加密系统中的重要组件,用于实现公钥加密和数字签名。公钥由两部分组成:公钥和私钥。公钥可以公开发布,任何人都可以使用它来加密数据或验证数字签名,而私钥是保密的,只有拥有者可以使用它来解密数据或签署数字签名。在应用程序开发中,SHA1和公原创 2023-03-29 17:30:16 · 1058 阅读 · 0 评论 -
源码编译之Android.mk的那些事儿
Android.mk文件的基本属性解析1.include此命令是指引用相关的变量或者指令到本次的mk文件中。2.include $(CLEAR_VARS)因为Android编译环境规定,以LOCAL_开头的都是全局变量,因此,在定义mk里面的属性之前,需要把之前的变量值清楚掉。CLEAR_VARS实际上是引用的build/core/clear_vars.mk文件,用于清除部分以LOCAL_开始的变量(不会清除LOCAL_PATH)3.LOCAL_PACKAGE_NAME : APK名字如果是被原创 2021-06-22 14:48:21 · 678 阅读 · 0 评论 -
客户端自动登录实现
我们在做手机客户端的时候,登录成功了之后,需要把账户信息保存下来。下次打开就没必要再进入登录界面了,而应该实现自动登录,让用户直接进入数据展示主界面。大致思路如下:1、在登录的模块中,如果登录成功,那么就会有成功后的执行方法,我们在此方法中把账户信息,如userId,userName,passWord通过shareprefrence或者数据库保留到本地。同时,还需要保留一个标志位KEY_SKIP...原创 2018-09-26 16:20:26 · 1121 阅读 · 0 评论 -
Handler机制中线程切换和消息阻塞再剖析
1、Handler是如何实现线程转换的? 如果要理解知识点,我们必须要清楚MessageQueue、Looper、和Handler的内在联系和运行机制。总体来说,Looper.prepare()方法为当前线程创建了一个Looper对象和一个MessageQueue对象,然后把他们放到线程的本地存储区ThreadLocal里面,Looper.loop()方法变开始不断从MessageQue...原创 2018-08-26 00:22:08 · 3121 阅读 · 1 评论 -
关于Binder机制的学习和理解
1、Android为什么选用Binder? 虽然Linux已经存在很多IPC的方式,比如Socket、管道、消息队列、共享内存等,但是这些方式还是存在一些不足的地方。 a、首先传统的IPC机制没有安全措施,接收方无法获取对方进程的进程ID或者UID,完全需要依靠上层的协议,比如用户密码这些来保护。但是Android系统为每一个应用程序都分配了用户ID(UID),通过UID可以甄别进程的身份,控...原创 2018-08-14 17:01:09 · 664 阅读 · 0 评论 -
Dialog弹窗操作相关注意事项
现在项目中经常会涉及到弹窗的操作,有时候我们会用windmanager来直接加载一个布局作为弹窗,有时候一些简单的弹窗也可以用继承dialog的形式自定义弹窗,同样可以达到预想的效果。下面贴出一段创建自定义弹窗的代码片: Dialog mDialog = new Dialog(context, R.style.dialog); Window window = ...原创 2018-08-14 09:27:21 · 1739 阅读 · 0 评论 -
开机过程中进程的创建流程框架图
这是一个简单的内核、native 、系统进程、 app进程的关系图原创 2018-02-23 11:01:03 · 413 阅读 · 0 评论 -
Android四大组件之Service的创建过程
整个Service的启动流程大致可以分为如下几个步骤:应用进程 A发起startService操作,实际上是通过Binder IPC机制向系统进程system_server中的ActivityManagerService服务模块发送startService的请求消息;系统进程system_server进程收到请求后,通知zygote进程fork一个新的应用进程B;Progress B通过...原创 2018-02-28 14:06:17 · 1118 阅读 · 0 评论 -
Android事件分发机制代码片段分析
最近又去看了一下android事件分发机制,下面是我从源码中摘出来的事件分发机制的脉络图: 从这张图,大家可以很清晰地看出来android是怎么把事件通过哪些方法传递的。原创 2017-08-15 10:36:17 · 261 阅读 · 0 评论 -
RXJava 2.0操作符学习
1、merge操作符、zip操作符和join操作符merge是把两个数组的数据合并到一个新的数组中,新的数组是两个数组长度之和。zip合并后的新数组长度是两个数组中长度小的那个,并且合并的方式可以由我们自己定义。join合并后的新数组是连个数组的乘积(较少用到)。...原创 2018-10-17 10:37:45 · 306 阅读 · 0 评论 -
车载系统Android WIFI开发小结
1、WifiManager 操作wifi的管理类 ,通过系统服务获取:wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);wifiManager.setWifiEnabled(true/false); //打开或者关闭wifiwifiManager.startScan(); //开始扫描...原创 2019-03-04 17:22:16 · 1665 阅读 · 0 评论 -
解决TextView中文英文数字混排导致的自动换行问题
Android原生的TextView,在某些特定的时候(我是在ListView的适配器里面),遇到中文和数字或者中文和英文一起混排的时候,会出现自动换行的现象。本来第一行还有很多空间可以显示,却莫名其妙地换行显示。经过网上的资料查找,需要继承TextView并重写OnDraw方法,具体代码如下:protected void onDraw(Canvas canvas) { TextPaint...原创 2019-03-19 15:14:54 · 5037 阅读 · 1 评论 -
基于IjkMediaPlayer的播放器
作为一个练手项目,基于IjkMediaPlayer的仿照腾讯视频风格的播放器,支持全屏缩放,对其中核心的代码做记录。播放器总体架构如图所示:player是继承frameLayout,自己内部拥有IjkMediaPlayer的实例,以及做渲染显示用的TextureView,同时player只有一个mContainer子控件,mContainer同样也是一个frameLayout容器,容纳Tex...原创 2019-03-19 17:57:07 · 6640 阅读 · 0 评论 -
车机屏幕适配方案总结
基本概念:1、px像素单位,构成图片的最小单位,1px相当于屏幕的一个物理像素点。2、分辨率屏幕的宽度上的像素点 * 高度上的像素点,例如1280*720。可以通过命名 vm size 获取分辨率信息 wm sizePhysical size: 1280x4803、屏幕尺寸指的是屏幕对角线的长度,单位是英寸。1英寸=2.54厘米。4、dpi屏幕像素密度,指的是每英寸上面的像...原创 2019-03-11 15:11:09 · 5645 阅读 · 2 评论 -
OKHttp+Gson解析网络json数据
1、定义OKHttp的客户端,并设置一些常用属性OkHttpClient mOKHttpClient;OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(15, TimeUnit.SECONDS); //设置连接超时时间 File sdcachedi...原创 2019-03-08 12:39:18 · 2071 阅读 · 0 评论 -
Android串口开发总结
在嵌入式的开发中,经常会用到串口通信,用来和不同的硬件模块通信。比如最近我在开发行车记录仪,就用到了串口通信,串口就像一个桥梁,连接起了核心板(imax6)和行车记录仪(DVR)之前的数据通路。使用串口,分为以下几个步骤:1、导入Google的开源串口项目,此项目通过jni的方式提供了打开和操作串口的方法,同时也提供了java层代码的示范使用。代码地址:https://github.com/j...原创 2019-05-13 20:20:16 · 750 阅读 · 0 评论 -
window弹窗接收view以外的触摸事件
项目上遇到这样一个需求,按键增减音量的时候会有一个window弹窗出来,在点击弹窗以外的地方需要立刻让其消失。如果这个弹窗是dialog,那么可以设置方法setCanceledOnTouchOutside(true)来实现这个效果;但是如果是一个windowManager操作添加的window弹窗,这个时候就需要我们自己去监听外部的点击事件,然后把自己隐藏掉。1、弹窗的属性flag设置Wind...原创 2019-06-05 18:27:16 · 4546 阅读 · 0 评论 -
多媒体MediaScanner机制探究学习
概述:MediaScanner和媒体文件扫描有关,例如music的歌曲专辑名、播放时长,图片的大小、MINE类型等,都是它扫描得到的。我们应用程序通过MediaStore接口查询媒体数据库得到的多媒体数据也和MediaScanner有关,因为数据库里面的数据都是MediaScanner添加的。总体关系如下图:MediaScanner大体分为四个部分MediaScannerReceiver:...原创 2019-09-05 14:55:30 · 415 阅读 · 0 评论 -
StorageManager获取U盘挂载状态
StorageManager是Android SDK中管理存储设备的一个类。其中的存储设备分内部存储和外部存储,外部存储可以有SDCard、U盘等其他挂载的外设。StorageVolume代表的是一个设备信息的数据结构,里面包含了名称、路径、挂载状态等等信息。以前获取设备列表的方法大多是通过反射获getVolumeList()方法获取到StorageVolume[]数组,但是现在发现完全没有必...原创 2019-09-06 16:37:13 · 6725 阅读 · 0 评论 -
绘制带线性颜色变化填充的折线图
最近在项目中遇到一个显示折线图的效果,但此效果与一般的折线图显示有几点特殊的要求:1、折线图里面,需要用特定的颜色填充,并且此颜色右上而下是渐变的;2、此折线图只需要均匀显示10个数据;3、在0,3,6,9这几个点上面,需要把改点代表的数字显示出来。效果图如下: 此效果的时候不多解释,肯定需要用到我们的自定义View,通过canvas来绘制曲线,绘制文字,绘制多边形并且用线性变化的颜色填充它,在底原创 2017-08-04 16:55:38 · 1990 阅读 · 0 评论 -
View的scrollTo/scrollBy
View的scrollTo和scrollBy实现了View的滑动,但是这种滑动的是瞬间完成的,没有过度的效果,我们看看它的源码: /** * Set the scrolled position of your view. This will cause a call to * {@link #onScrollChanged(int, int, int, int)} and th原创 2017-08-18 15:09:19 · 333 阅读 · 0 评论 -
自定义绘制圆形、圆环和弧线
有时候我们在做程序的时候,需要用到canvas来自定义绘制图形,这里介绍一下绘制圆形、圆环和弧线的方法。 1、绘制圆形和绘制圆环其实可以可以通过调用drawCircle这个方法来完成,API方法解析如下: Canvas.drawCircle(float cx, float cy, float radius, Paint paint); //cx 、cy是圆心的坐标,radius是圆的半径原创 2017-08-10 17:43:36 · 2573 阅读 · 0 评论 -
Android事件分发机制
Android事件的传递路其实是一个递归的过程,默认情况下:首先事件由Activity传递下来,依次调用ViewGroup 、View的dispatchTouchEvent 方法,然后又从View开始依次调用View、ViewGroup、Activity的onTouch方法,整个事件的传递过程类似于一个“U”型,下面给出一个图:原创 2016-07-28 09:16:36 · 378 阅读 · 0 评论 -
Handler消息传递机制
在做Android开发的过程中,不免会遇到在其他线程中需要更新UI界面的情况,然而UI界面组件只允许主线程去更新它,这时我们就可以用到handler消息机制了。 跟Handler消息机制有关的几个组件做一下介绍:原创 2016-01-27 09:40:28 · 491 阅读 · 0 评论 -
百度地图学习(一):加载基本地图、本地定位、地理编码
最近在学习百度地图的使用,在此记录一下自己的心得。 一、基础地图的加载 1、下载百度地图的Android SDK,在自定义下载选项中,我们可以根据自己项目的实际需要下载相应的SDk。下载好之后,解压会得到一个libs文件,里面有各种.so和一个.jar文件。 2、创建Android项目,把之前得到的libs文件直接复制到项目中,这样百度地图的SDK就算引入成功了。 3、创建密钥Key,创建的原创 2016-04-21 16:12:28 · 1796 阅读 · 0 评论 -
Android Context解析
做Android开发的时候,我们经常会遇到Context这个东西,从字面上来理解,它叫做“上下文”,其实代表是Android系统的一些特殊的资源。 Context的继承关系:单单从源码的结构来看,Context仅是一个抽象类,它的子类有ContextWrapper和ContextImpl。ContextWrapper只是对Context做了一个简单的封装,它的子类或者间接子类就包含Activity原创 2016-05-10 15:37:50 · 417 阅读 · 0 评论 -
获取手机屏幕的宽高
我们在编程的时候,经常会通过获取当前手机屏幕的大小来调节一些控件的宽高,下面是获取手机窗口信息的代码 DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int width = metric.widthPixels; // 屏原创 2016-03-25 18:21:40 · 568 阅读 · 0 评论 -
Android图片与内存基础知识
Android图片的使用和处理是一个比较敏感的话题,因为图片确实比较吃内存,很容易导致OOM。下面是我关于Android图片知识的一些总结:一、图片存在的几种形式 1、文件的形式存在于SD卡或手机存储中(二进制形式) 2、数据流的形式存在于内存或者网络上(二进制形式) 3、bitmap对象形式存在于堆内存中(对象形式) 我们通常说的图片的大小指的就是图片以文件的形式存在的大小,当它变成原创 2016-04-05 18:59:35 · 361 阅读 · 0 评论 -
异步任务AsyncTask
有时我们要做一些耗时的任务时,往往不会在UI主线程里面去做这些事情,而是在另外的线程里去执行。我个人觉得用异步任务AsyncTask可以非常简单地实现这一操作。它有两个特别明显的好处:1、不会阻塞主线程;2、可以修改主线程界面组件。原创 2016-01-26 15:26:38 · 354 阅读 · 0 评论 -
Android与JavaScript的相互调用
最近项目中解决一个功能,需要把html代码加载到Android项目中来,同时还会在js代码中操作Java里面的数据,同时java代码也会调用js。去网上查了一些资料,也看了一下李刚老师的《疯狂Android讲义2》,基本实现了预期的功能。原创 2015-10-15 09:38:28 · 498 阅读 · 0 评论 -
Android中的两种坐标系
一、Android坐标系 在Android坐标系中,原点就是屏幕的左上角顶点,从这个点向右为X轴正方向,向下为Y轴负方向。 系统系统了getLocationOnScreen(intlocation [])这样的方法来获取该View左上角在Android坐标系中的坐标。此外,在触摸事件中,可以通过getRawX()、getRawY()方法获取触点在Android坐标系中的坐标。 二、视图坐标系原创 2016-08-15 18:36:05 · 836 阅读 · 0 评论 -
View和ViewGroup的测量与绘制过程总结
1、View的测量 View在调用onDraw(Canvas)方法绘制自己之前,会先去调用onMeasure(int ,int)方法测量自己。我们可以通过取onMeasure方法传递进来的参数的高两位获得测量模式,测量的模式有三种: EXACTLY:即精确值模式,对应于“match_parent”或者明确指出宽高值的情况,在这种测量模式下,取值就从onMeasure方法传递进来的参数中得到。系统原创 2016-08-04 15:23:03 · 626 阅读 · 0 评论 -
Android音乐播放器demo
最近试着做了一个简单的音乐播放器,下面是一些自己的小小总结: 1、我用的是MediaPlayer来播放,掌握它的生命周期很重要 2、在准备播放的时候,即由Initialized变成Prepared的时候,推荐使用异步的prepareAsnc()方法,我们可以在监听回调方法onPrepared()中去执行start()方法。 3、在开始准备播放一个音乐(prepareAsync())之前,应该确原创 2016-09-19 10:51:38 · 2344 阅读 · 0 评论 -
Android使用webservice与服务器通讯
概述:我们在Android移动设备上面,与服务器通讯有很多种方式,其中webservice便是其中一种较方便且易用的方式。服务端只要把webservice接口暴露出来,再配上wsdl文档,客户端就可以很方便的调用了。 WSDL:刚刚讲到wsdl文档,这个其实是服务端再写好webservice接口后,生成的一个在线文档。通过服务端给出的网页地址,你就可以去访问到这个网页文档。它准确地描述了客户端可以原创 2017-06-27 14:06:40 · 774 阅读 · 0 评论 -
Activity的启动模式和Intent.FLAG_ACTIVITY_NEW_TASK理解
为什么需要启动模式? 在正常默认的情况下,我们启动了多个Activity之后,系统会为这些Activity分别创建实例,然后根据先后顺序依次压入任务栈,最后进栈的Activity在栈顶。当我们点击back键的时候,Activity就根据后进先出原则依次出栈然后显示到界面上,直至栈空退出到桌面。然而在千变万化的需求中,这种默认的规则不能满足我们的开发,于是Android提供了其他几种Activity原创 2017-06-28 18:21:05 · 1545 阅读 · 1 评论 -
SeekBar的使用和竖向的SeekBar
这是实现的几个seekbar的效果图,大家可以先看看: 第一个seekbar是以提供的bitmap为背景,然后进度条是透明的效果<SeekBar android:id="@+id/horiSeekBar" android:layout_width="match_parent" android:layout_height="wrap_content原创 2017-06-16 12:11:22 · 10032 阅读 · 1 评论 -
Android线程池的使用
线程池,顾名思义就像是存放线程的池子一样的,我们需要使用线程时,就从这个池子里面去取线程使用,用完之后,线程又会放回这个池子里面,等待下次的线程调用。使用线程池有很多好处,首先线程池中的线程可以重复利用,可以减少线程创建和销毁的性能开销;其次,通过设置核心线程数和最大线程数,可以控制线程的并发数量,避免太多线程的并发开启争夺CPU资源;最后一点就是,线程池可以对线程进行有效的管理,比如Schedul原创 2017-05-04 11:22:13 · 334 阅读 · 0 评论 -
Android shape的使用
我们在做Android项目的时候,有时候会用到一些简单的图片效果,但是这时身边又没有美工在的时候,就显得很尴尬了。其实一些简单的图片效果,我们根本就不需要美工去切图,我们自己运用Android 的shape 编写一个XML就OK了。 shape的各种属性如下:<?xml version="1.0" encoding="utf-8"?><shape xmlns:and...原创 2017-04-17 14:31:57 · 282 阅读 · 0 评论 -
高德地图实战:后台持续定位实现
最近有个项目需求,要求应用只要打开后,就要每隔一段时间发送一次自身的位置,即便是应用退出了,也同样要在后台持续该功能。 在开始的时候,我准备用后台服务Service机制来实现这一功能,但是想到Service在后台运行久了,可能会被系统杀死,于是否定了这个方案。后面查阅资料,发现AlarmManager定时任务机制比较适合本次需求。因为AlarmManager是系统级的服务机制,即便是我们的应用进程原创 2017-02-16 10:42:20 · 18673 阅读 · 3 评论 -
HorizontalScrollView滑动冲突的问题
最近项目涉及到一个功能,需要在HorizontalScrollView里面添加一个SeekBar控件用来调节音量。当代码写好之后,自己动手滑动一下,感觉效果特别差。具体表现就是:SeekBar的滑块只有在点击的时候才有作用,而在手指拖动滑动它的时候,SeekBar的滑块并不会移动,而是HorizontalScrollView在移动,这就很尴尬了。 后面经过查看源码和分析,解决了此问原创 2016-12-30 18:20:23 · 1622 阅读 · 0 评论