
Android
文章平均质量分 83
peter_nj_RD
手机系统软件开发
展开
-
常见View的属性
最近在搞Android手机软件开发,在学习各种View的使用,把过程中看到的各种View的属性链接跟大家分享一下 方便大家学习TextView属性http://www.cnblogs.com/hxxy2003/archive/2011/08/05/2129050.htmlImageView属性http://407827531.iteye.com/blog/1117199E原创 2013-05-17 14:46:05 · 785 阅读 · 0 评论 -
Android 8.0中各种通知写法汇总
# 概述通知([Notification](https://developer.android.google.cn/reference/android/app/Notification.html))是应用为用户显示重要信息提示的一种工具。系统为开发者提供了不同种类的通知样式模板可以使用,开发者也可以根据自己需要自定义通知样式。之前写过类似的通知demo,时间长代码找不到了。另外,Google在An...原创 2018-07-12 12:13:40 · 5070 阅读 · 1 评论 -
系统服务之定时服务(AlarmManager)
概述AlarmManager提供了对系统定时服务的访问接口,使得开发者可以安排在未来的某个时间运行应用。当到达闹铃设定时间,系统就会广播闹铃之前注册的Intent。如果此时目标应用没有被启动,系统还会帮你自动启动目标应用。即使设备已经进入睡眠已注册的闹铃也会被保持,只有当设备关闭或是重启的时候会被清除。下面基于Android 8.0源码来一起学习一下。闹铃类型AlarmManage...原创 2018-07-31 20:29:49 · 4891 阅读 · 1 评论 -
AIDL的简单使用和注意事项
概述AIDL(Android interface definition Language)——Android 接口定义语言, 是 Android 提供的一种进程间通信 (IPC) 机制。可以利用它定义客户端与服务端使用进程间通信 (IPC) 进行相互通信时都认可的编程接口。 在 Android 上,一个进程通常无法访问另一个进程的内存。 尽管如此,进程需要将其对象分解成操作系统能够识别的原语,...原创 2018-08-06 09:57:50 · 617 阅读 · 0 评论 -
定时器之Timer
概述Timer 是可以指定将来的某个时间在后台线程中调度任务的工具。每个Timer对应一个后台线程用来顺序执行这个Timer对应的所有任务(TimerTask)。正因为是单线程顺序执行的,所以每个任务必须被快速执行,不能做耗时操作,否则会阻塞后面任务的执行。示例下面是一个简单的Timer使用示例,表示延迟1s中执行,每5s钟执行一次。Timer还提供了多种schedule方法用来满...原创 2018-08-02 17:16:00 · 403 阅读 · 0 评论 -
Messenger使用及原理详解
概述Messenger与Handler类似,可以用它来发送和处理消息,其低层的实现是对Binder的一个简单封装。使用起来也比较方便,在一个线程中通过指定一个Handler来创建Messenger,并把它传递给另一个进程,这样两个进程之间就可以通过消息(Message)来传递信息了。使用方法主要思路: 客户端通过bindService来绑定服务端,并从服务端获得IBinder接口...原创 2018-08-07 16:17:34 · 2871 阅读 · 0 评论 -
(Android 9.0)应用使用数据统计服务——UsageStatsManager
前言Android5.0以前,使用ActivityManager的getRunningTasks()方法,可以得到应用包名和Activity;Android5.0以后,可以通过UsageStatsManager.queryUsageStats方法替代,但是也只能得到应用包名。当然你也可以通过AccessibilityService,也可以得到应用包名和Activity。正好最近用到UsageS...原创 2018-08-18 22:23:12 · 3696 阅读 · 0 评论 -
(Android 9.0)动态权限运行机制源码分析
概述Google在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。应用的相关功能每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。动态权限申请的使用主要涉及到以下几种方法: 方法 作用 checkSelfPermission(@NonNull String permission) 检查权限 requestPe...原创 2018-08-26 20:43:01 · 8425 阅读 · 0 评论 -
Java高级特性——反射
概述定义JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。用途在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成...原创 2018-08-27 16:44:58 · 928 阅读 · 0 评论 -
(Android 9.0)关于Cursor的内存泄露问题总结
前言Android中数据的持久化经常会使用到SqliteDatabase或是ContentProvider,查询数据的时候可以通过SqliteDatabase.query或是ContentResolver.query方法来获取一个Cursor对象,这个Cursor对象里面就包含了我们所要查找的数据。在之前的认知里Cursor在使用完毕后必须要主动调用close来关闭释放资源。最近发现项目里有很...原创 2018-08-23 23:07:08 · 1838 阅读 · 0 评论 -
关于Fragment生命周期异常的分析
问题描述最近在总结Activity和Fragment相关知识的时候遇到一个问题,就是首先通过动态方法在Activity的onCreate中添加Fragment,然后旋转屏幕观察Fragment的生命周期调用,发现每个方法都会被调用两次,很诡异,仔细思考了一下马上就找出了答案。代码: getSupportFragmentManager() ...原创 2018-08-31 10:37:13 · 808 阅读 · 0 评论 -
Java线程等待唤醒机制
前言今天看源码的时候遇到这样一个场景,某线程里面的逻辑需要等待异步处理结果返回后才能继续执行。或者说想要把一个异步的操作封装成一个同步的过程。这里就用到了线程等待唤醒机制,下面具体看一下。等待唤醒机制示例下面代码是一个简单的线程唤醒机制示例,主要就是在Activity启动的时候初始化并start线程,线程start后会进入等待状态,在onResume方法中执行notify方法唤醒线...原创 2018-09-11 21:27:29 · 651 阅读 · 0 评论 -
(Android 9.0)Activity启动流程源码分析
前言熟悉Activity的启动流程和运行原理是一个合格的应用开发人员所应该具备的基本素质,其重要程度就不多做描述了。同时,知识栈应该不断的更新,最新发布的Android 9.0版本相较于之前的几个版本也做了许多改动和重构,但是大体流程变化不大。本文基于Android 9.0版本源码,从Activity启动方法startActivity为切入口分析整个流程。一、发出启动请求启动一个A...原创 2018-09-09 20:50:50 · 7932 阅读 · 4 评论 -
耗时方法请一定要做线程检查
前言主线程又称UI线程,是不能做耗时任务的,否则会导致UI界面卡顿甚至ANR。 最常见的case就是如果我们在主线程做访问网络操作会抛出NetworkOnMainThreadException异常,抛出这个异常是因为Android在StrictMode中做了相应的检查,如果发现主线程有访问网络的行为就会主动终止并抛出异常。 public void onNetwork() ...原创 2018-09-07 10:39:17 · 538 阅读 · 0 评论 -
Android高级进阶之自定义View
前言在网上看到一张图,花了一天时间,自己尝试着写了一个自定义View,里面涉及到了自定义属性、自定义View padding属性的处理、画笔(Paint)和画布(Canvas)的使用、分辨率适配问题、性能问题等,觉得还是有些东西值的记录一下的,效果图如下:自定义属性基础属性定义说明: 属性类型 属性定义方式 属性值说明 color FF5...原创 2018-09-13 15:54:31 · 12434 阅读 · 2 评论 -
Android中的菜单实现汇总
前言菜单是许多应用类型中常见的用户界面组件,实现的方法有很多,本篇中对一些常用的控件或方法进行一个汇总。三种基本菜单Google在API开发指南中关于Menu的用法推荐了三种基本菜单的实现方法:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和弹出菜单(PopupMenu)。选项菜单(OptionsMenu)选项菜单是某个 Activity 的主...原创 2018-03-15 09:49:23 · 483 阅读 · 0 评论 -
Android SystemProperties 和 ADB shell 命令查看手机状态
SystemProperties系统属性,对整个系统全局共享,通过SystemProperties.set()/SystemProperties.get()这两个函数对系统的属性进行读取和设置。可以通过ADB shell进行查看,具体方法是adb shell getprop +“具体的属性对应的名称”就可以读取你想要的属性了。如果不知道具体的属性是什么名称也可以先输入adb shell g原创 2013-07-19 16:10:42 · 16325 阅读 · 0 评论 -
odex文件介绍
在平台用mm编译apk时,会在out目录下生成.apk和.odex两个文件。odex文件是为了加快运行速度,把dex分出来做的预处理,以达到优化应用的目的。odex文件的名字是和对应应用的名字一一对应的。但是一般开发时需要mm编译出一个完整的apk,直接就可以push到手机中进行调试,不希望再额外push一次odex。想要android应用程序编译不产生odex,需要在具体应用下面的Android转载 2014-03-12 17:35:13 · 1851 阅读 · 0 评论 -
android的RTL支持
Android 4.2 支持原生RTL(由右到左显示)http://blog.youkuaiyun.com/ultrapro/article/details/8690145原创 2013-09-25 19:40:31 · 7222 阅读 · 0 评论 -
擦除用户数据(eng版本平板)
仅限eng版本fastboot devicesfastboot erase userdatafastboot reboot清除有风险,操作需谨慎原创 2015-03-04 12:19:52 · 634 阅读 · 0 评论 -
MotionEvent Android API level 21
最近遇到一个跟MotionEvent相关的问题,顺便了解一下相关知识,理解不是很深刻,看到多少写多少吧,仅供参考。public final classMotionEventextends InputEventimplements Parcelablejava.lang.Object ↳android.view.Inpu原创 2015-04-30 17:48:27 · 726 阅读 · 0 评论 -
读取Android手机设备相关信息
最近在论坛上有人问相关问题,正好最近看了些相关的东西,项目中也用到过,写篇博客来总结下。首先说下获取到这些信息有什么用?用于区分不同设备或是运营商。在应用开发过程中经常会遇到不同的运营商或是客户的需求是不一样的,你又不能仅仅只是因为一两处功能的差异就多维护一套代码,这个代价太高。所以常用的方法就是通过各种系统配置项来做功能区分,不同的配置实现不同的逻辑,以达到多个版本兼容、降低原创 2016-08-17 14:39:50 · 1025 阅读 · 0 评论 -
OOM问题总结
OutOfMemoryError(OOM)就是常说的内存泄露问题。为了能够使Android应用程序能够高效快速地运行,所以Android的每个应用程序都会用一个专有的Davilk虚拟机(Android L 上谷歌使用了传闻已久的ART来代替Dalvik)实例对象来运行,这个Davilk对象是由Zygote服务进程孵化出来的,这样的机制使每个应用进程都只能在属于自己的进程空间中运行。Androi原创 2015-03-23 15:59:57 · 8980 阅读 · 1 评论 -
系统服务之下载管理(DownloadManager)
前言: 最近一直在写一个新闻客户端练手,每天也会关注一下鸿洋的微信公众号推荐的文章,看到一篇关于系统下载服务的文章比较感兴趣,就把它实现到我的新闻客户端用来为用户提供图片新闻的下载功能,顺带着分析一下源码(Android 7.1.1),总结一下在功能实现过程中遇到的坑。概述: DownloadManager是Android提供的用来处理长时间HTTP下载任务的一个系统原创 2017-03-16 17:11:59 · 4441 阅读 · 0 评论 -
仿微信群聊头像(图像合成、缩放)
最近群里面有人问,微信群聊的头像是怎么实现的,就花了半个小时写了一个demo,今天又优化了一下,写个博客分享一下。先上效果图 原理 原理比较简单,就是用画布(canvas)把九张图片合成一张图,然后再按比例缩放一下。 主要就是两个方法,一个是图片合成方法mergePictures(int[] pictures, int row, int column),一个是图片缩放方法resizeImage原创 2017-04-07 16:05:07 · 33393 阅读 · 2 评论 -
二维码
前言最近自己在写一个问卷调查的App,想要实现通过二维码的方式来分享一个问卷的功能,需要用到二维码生成和识别的相关知识,搜索学习了一下,做一个总结。二维码二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。二维条码/二维码(2-dimensi原创 2018-01-17 11:09:42 · 357 阅读 · 0 评论 -
RecyclerView+ContextMenu实现菜单项
前言最近自己写了一个问卷调查的APP,想要实现对RecyclerView里面列表进行移动或删除的功能,常规的方法会使用PopupWindow、AlertDialog或是DialogFragment等控件来做,检索资料的时候无意间发现RecyclerView是支持ContextMenu的,所以自己尝试一下。效果如下:效果图实现步骤先来简单介绍一下实现步骤。分以下几个步骤:1、给你RecyclerVi原创 2018-01-18 13:37:49 · 3734 阅读 · 1 评论 -
SharedPreferences总结
前言:SharedPreferences很早就用过,但也只限于会用,隔了一段时间再用发现有点生疏,还是要去网上找用法,对其运行原理和不同方法间的区别也知之甚少,决定写一篇文章来总结一下,加深下印象和理解。概述:SharedPreferences是Android提供的几种常用的数据存储解决方案之一,应用可以通过它来访问和修改一些他们所关注的数据,常被用来存储少量的、格式简单的原创 2018-01-17 11:13:27 · 690 阅读 · 0 评论 -
Retrofit + Rxjava + RxAndroid实现网络请求
之前自己实现了一个新闻类阅读APP,最近想使用当下流行的Retrofit + Rxjava + RxAndroid + MVP架构来重构一下,本文以每日一文作为数据源API做一个简单的示例,来介绍一下如何使用Retrofit + Rxjava + RxAndroid来实现网络数据请求与解析。一、配置在你项目的build.gradle文件中加入如下配置: //rxjava ...原创 2017-05-11 14:49:43 · 2194 阅读 · 3 评论 -
Android推荐的三种基本菜单
Google在开发者网站上关于Menu的API指南中为开发者推荐了三种基本的菜单:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和弹出菜单(PopupMenu)。下面分别给出相应的基本实现步骤。原创 2018-03-15 09:41:38 · 20952 阅读 · 2 评论 -
Android四大组件——BroadcastReceiver(原理篇)
#前言Android四大组件——BroadcastReceiver(基础篇)里面介绍了BroadcastReceiver相关的基础知识,本文将从Android 8.0源码来分析一下广播的注册和接收原理。#BroadcastReceiver的注册Android系统中BroadcastReceiver的注册方式分为动态注册和静态注册两种。动态注册必须在程序运行期动态注册,其实际的注册动作由Con...原创 2018-10-31 10:49:18 · 918 阅读 · 0 评论