Andorid应用开发
文章平均质量分 92
介绍Andorid应用开发,内容包含:Andorid中常用的Api的使用、第三方库的使用、源码分析等内容。
blueberry_mu
不积跬步,无以至千里。不积小流,无以成江海。
展开
-
音频特效实践
音频特效基础实践原创 2022-07-17 17:29:56 · 2327 阅读 · 0 评论 -
Android制作一个视频录制器
使用底层api制作一个视频录制app原创 2022-06-11 18:15:21 · 1952 阅读 · 0 评论 -
Android文件上传
上传的方式本文将介绍2中文件上传的方式: 1.multipart/from-data方式上传。 2.binary方式上传。multipart上传方式html的上传方式代码这中上传方式是我们最常用的上传方式。比如我们使用网页上传文件,其中html代码大致为这样:<form method="post" enctype="multipart/form-data" action="/upload/sin原创 2017-07-07 16:45:02 · 3000 阅读 · 0 评论 -
Android 中多线程的简单使用
一、多线程的实现 1.最简单的启动一下新线程private void startNewThread(){ new Thread(){ @Override public void run() { //耗时操作 } }.start(); }或者: pr原创 2016-05-10 13:38:11 · 3721 阅读 · 1 评论 -
android多线程----同步集合
一、程序中的优化策略—-CopyOnWriteArrayList Copy-On_Write 是一种用于程序设计中的优化策略,器基本思路是: 从多个线程共享同一个列表,当某个线程想要修改这个列表的元素时,会把列表的元素Copy一份,然后进行修改,修改完成之后在在将新的元素设置给这个列表,这是一种懒惰策略。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不要加锁,因为当前容器不会原创 2016-05-10 17:57:51 · 3445 阅读 · 1 评论 -
Android多线程-----同步锁
一、同步机制关键字synchronized 对于java来说,最常用的同步机制就是synchronized关键字,他是一种基于语言的粗略锁,能够作用于对象、函数、class。每个对象都只有一个锁,谁能够拿到这个锁谁就有访问权限。当synchronized作用于函数时,实际上锁的也是对象,锁定的对象就是该函数所在类的对象。而synchronized作用于class时则是锁的这个Clas原创 2016-05-11 10:27:40 · 20767 阅读 · 0 评论 -
Android多线程-------同步辅助类
一、循环栅栏 CyclicBarrier CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到达到某个公共屏障点。因为该Barrier在释放等待线程后可以重用,所以,称它为循环的Barrier 示例:public class CyclicBarrierTest { private static final int SIZE = 5; private static原创 2016-05-11 13:32:06 · 704 阅读 · 0 评论 -
AsyncTask 原理分析
一、先来看看AsyncTask的定义,以及主要的方法。 AsyncTask的定义如下:public abstract class AsyncTask<Params, Progress, Result> { ......}其中这几个泛型分别表示:参数类型、进度类型、返回结果类型。 接下来看看这个类中主要的方法//需要我们重写,其工作在子线程,用于执行比较耗时的操作protected a原创 2016-05-11 15:04:54 · 725 阅读 · 1 评论 -
Activity的生命周期方法
Activity负责UI元素的加载与页面之间的跳转,代表了一个页面单元,每个Activity都有声明周期,在不同的阶段会调用不同的的生命周期方法。Activity的生命周期有如下几个: 上图是一个Activity声明周期方法执行的流程图OnCreate() : 我们在创建继承自Activity的类时都会默认生成这个函数,它会在Activity第一次被创建的时候调用,通常会在这个函数中完成Acti原创 2016-05-24 16:21:51 · 1132 阅读 · 0 评论 -
防止Activity被重新创建
Activity在系统配置发生改变之后会重新创建,我们常见的是在手机旋转屏幕时activity就被重新创建了。那么怎么样才能不被创建呢?我们先来看一下系统的那些内容被改变后Activity会被重新创建。 系统的配置在Configuration类中,我们来查看Configuration类中的成员,看看他们分别代表的意思。mcc: SIM卡唯一标示IMSI(国际移动用户识别码)中的国家代码,由三位数原创 2016-05-25 14:51:41 · 6214 阅读 · 0 评论 -
Activity的启动模式
Activity的启动模式有4个,分别为standard、singleTop、singleTask、singleInstance。用户可以在AndroidManifest.xml中注册Activity时设置它的启动模式,例如: <activity android:name=".A" android:launchMode="singleTask"/>下面我们来一起看一下这四种原创 2016-05-26 10:10:54 · 1501 阅读 · 0 评论 -
IntentFilter的匹配规则
我们知道,启动Activity分为两种,显示调用和隐式调用。显示调用需要明确的指定被启动对象的组件信息,包括包名和类名,而隐式调用则不需要明确的指定组件信息。原则上一个Intent不应该即是显示调用又是隐式调用。如果二者共存的话以显示调用为主。 隐式调用需要Intent能够匹配目标组组件的IntentFilter中所设置的过滤信息,如果不匹配将无法启动目标的Activity。 IntentFil原创 2016-05-30 15:30:08 · 663 阅读 · 0 评论 -
Service的简单使用
一、先来看如何最简单的创建一个Service 1、新建一个类继承自Service重写其中的几个重要方法public class SimpleService extends Service{ private static final String TAG = "SimpleService"; @Override public void onCreate() { s原创 2016-05-31 10:21:39 · 1355 阅读 · 0 评论 -
使用AIDL
一、什么是aidl? AIDL是android内部一种进程通信接口的描述语言。二、使用aidl aidl支持的数据类型:基本数据类型 (int 、long、char 、boolean、double 等)String 和CharSequenceList:只支持ArrayList,里面每个元素都必须能够被AIDL支持。Map:只支持HashMap,里面的每个元素都必须被AIDL支持,包括ke原创 2016-06-03 17:14:54 · 5085 阅读 · 0 评论 -
使用Messenger
一、Messenger是android中一种轻量级的IPC方案,它的底层实现同aidl一样。 我们先来了解一下Messenger这个类,首先看一下Messenger的构造方法,它的主要有2个构造方法。 public Messenger(Handler target) { mTarget = target.getIMessenger(); } /** * C原创 2016-06-06 10:55:35 · 2058 阅读 · 0 评论 -
使用ShareUserId
一、Android系统回为每个应用分配一个唯一的UID,具有相同的UID的应用才能共享数据。两个应用通过ShareUID共享数据,需要相同的ShareUID之外还需要相同的签名才可以。在这种情况下他们可以互相访问私有数据,比如data目录,组件信息等。如果他们跑在同一个进程中,那么他们除了能共享data目录,组件信息,还可以共享内存数据。 二、使用 我们来看一下如何使用ShareUserId来共原创 2016-06-06 14:14:50 · 1359 阅读 · 0 评论 -
使用BroadCastReceiver
概念:BroadCast是一种广泛运用的,在应用程序之间传输信息的机制,Android中的广播与传统意义上的电台广播类似,一个广播可以有任意个接收者。广播机制是一个典型的发布-订阅模式。 Android的广播可分为普通广播、有序广播、本地广播和 Sticky广播。一、普通广播 普通广播是完全异步的,通过Context的SendBroadCast()函数来发送,消息传递的效率比较高,但所有的rec原创 2016-06-07 08:50:30 · 1472 阅读 · 0 评论 -
使用ContentProvider
一、简介: ContentProvider 在android中的作用是对外共享数据,也就是说可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对应用中的数据进行增、删、该、查。使用ContentProvider的好处是,统一了数据的访问方式。 ContentProvider的体层实现实际是Binder。二、使用: 一般原创 2016-06-08 10:24:14 · 5225 阅读 · 0 评论 -
ContentProvider原理分析
一、ContentProvider的介绍 关于ContentProvider的介绍,以及使用可以参考我的上一篇博客http://blog.csdn.net/a992036795/article/details/51610936二、原理 1、我们知道要访问一个ContentProvider要使用到ContentResolver。我们就先来看ContentReselover。我们通常使用Conten原创 2016-06-08 14:44:04 · 14267 阅读 · 3 评论 -
Android中点击事件的来源
本文将分以下在步骤寻找android中事件的来源: 一、activity启动时 创建window以及windowManager的过程。 二、调用setContentView设置布局的过程 三、Activity在onResume之后创建ViewRootImp将window和DecorView关联的过程 四、创建InputChanel 发送给InputManagerService进行注册的过程原创 2016-06-16 14:32:04 · 13119 阅读 · 9 评论 -
android点击事件的分发过程
转载请注明出处 http://blog.csdn.net/a992036795/article/details/51698023本文将讲述android点击事件的分发过程我的上一篇文章讲述了android点击事件的来源,本文接着讲述当点击事件传输到Activity之后 分发的过程是什么样的。 上一篇文章链接: http://blog.csdn.net/a992036795/article/det原创 2016-06-17 14:28:18 · 9320 阅读 · 0 评论 -
android滑动冲突的解决方案
一、前言 Android 中解决滑动的方案有2种:外部拦截法 和内部拦截法。 滑动冲突也存在2种场景: 横竖滑动冲突、同向滑动冲突。 所以我就写了4个例子来学习如何解决滑动冲突的,这四个例子分别为: 外部拦截法解决横竖冲突、外部拦截法解决同向冲突、内部拦截法解决横竖冲突、内部拦截法解决同向冲突。 先上效果图: 二、实战 1、外部拦截法,解决横竖冲突 思路是,重写父控件的onInterc原创 2016-06-22 17:53:08 · 19701 阅读 · 5 评论 -
Fragment源码浅析
一、FragmentActivity 、FragmentImpl、Fragment之间的关系1、我们先从FragmentActivity 看起,在FragmentActivity中有一个成员变量mFragments,并且完成了初始化,他是FragmentController。 final FragmentController mFragments = FragmentController.creat原创 2016-06-30 16:33:05 · 6282 阅读 · 3 评论 -
Android使用Gradle自动化打包
假如我们使用了友盟sdk或者别的sdk,我们需要在androidMainifest 填写一个渠道号,来帮助我们统计。也就说app发布之后需要每个应用市场对应着唯一的渠道号。如果我们不使用自动化打包的话,就非常的麻烦,需要自己去改Mainifest.xml中的渠道号。还好,我们可以使用gradle来帮我们完成这个过程。 我目前的一个项目使用了友盟统计,我需要在AndroidMainifest.xml原创 2016-08-02 16:36:56 · 2785 阅读 · 0 评论 -
Retrofit源码简要分析
一、Retrofit的使用 本文使用的Retrofit 2.1.0版本。 在gradle中加入: compile 'com.squareup.retrofit2:retrofit:2.1.0'如果要是要解析json,还需加入: compile 'com.squareup.retrofit2:converter-gson:2.1.0'如果要结合rxjava 需要加入: compil原创 2016-08-04 11:39:44 · 1421 阅读 · 0 评论 -
AppWidget的使用及原理分析
一 AppWidget的使用: 1、首先在res/layout文件夹下定义一个 布局文件 res/layout/app_widget.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orien原创 2016-08-05 17:11:53 · 2786 阅读 · 0 评论 -
Android中的Drawable
一、Android中有这么几种Drawable: 1、Bitmap File 2、Nine-Patch File 3、Layer List 4、State List 5、Level List 6、Transition Drawable 7、Inset Drawable 8、Clip Drawable 9、Scale Drawable 10、Shape Drawable 下面我们原创 2016-08-09 12:23:59 · 675 阅读 · 0 评论 -
Android 动画
一、 android动画分为 属性动画 和 View动画。 View动画又分为 补间动画和帧动画二、详细介绍1、属性动画 属性动画的xml文件定义在 res/animator 文件夹下 语法:<set android:ordering=["together" | "sequentially"]> <objectAnimator android:propertyName原创 2016-08-09 17:04:03 · 664 阅读 · 0 评论 -
Android Camera的使用 (一)
一、前言 在android 5.0 之后 官方已经不推荐Camear这个类了,而是推荐 android.hardware.camera2 包下的api.但我们还是有必要学习一下。Camera这个类可以被用来照相、start/top相机预览、将图像帧编码成video。它对于相机服务相当于一个客户端,它管理者真正的硬件Camera。要访问硬件Camera我们必须在AndroidManifest.xml原创 2016-08-10 13:39:48 · 2933 阅读 · 0 评论 -
Android Camera的使用 (二)
一、前言 在我们使用Camera时我们应该首先考虑以下几个注意事项 1、我们的设备必须要有摄像头,以及我们应该在AndroidManifest.xml中将需要用到的权限必须加上。 2、我们的应用程序用Camera来干什么?能否考虑使用系统自带的Camera应用,还是需要自定义一个相机。 3、我们的媒体文件怎样存储,是私有,还是共享?以及我们的相册应用可以查看这些文件吗? 我们接下来就针对上原创 2016-08-10 14:31:23 · 1097 阅读 · 0 评论 -
Android Camera的使用 (三)
一、创建一个Camear App二、创建拍照功能 创建一拍照我们分以下几步: 1、检测和访问相机—–检测相机是否存在 2、创建一个用来预览的对象——创建一个 类继承自SurfaceView 并实现SurfaceHolder接口,这个类用来显示camera传来的图像。 3、创建布局——-创建不就用来放SurfaceView 以及控制按钮 4、设置监听器—设置监听器,当按钮点击时开始拍照或录像原创 2016-08-10 15:50:31 · 6764 阅读 · 0 评论 -
Android网络框架设计
一、构建思路 1、构建一个Request用来封装 HTTP请求的类型、请求头参数、请求体、优先级、返回类型、等一些必要的属性。 这个Request定义为抽象的,使得用户可以扩展。 2、构建一个队列(BlockingQueue) 用来存贮这些请求,用户可以自己将请求添加到这个队列中 3、创建多个线程NetworkExecutor,用来遍历队列(BlockingQueue)获得Request,请求原创 2016-08-17 14:48:35 · 2053 阅读 · 0 评论 -
Mockito的使用一
一、Mockito的引用 Gradle:repositories { jcenter() }dependencies { testCompile "org.mockito:mockito-core:1.+" }Maven:<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId原创 2016-08-23 15:04:45 · 2101 阅读 · 0 评论 -
Mockito的使用 二
11、为回调做测试桩when(mock.someMethod(anyString())).thenAnswer(new Answer() { Object answer(InvocationOnMock invocation) { Object[] args = invocation.getArguments(); Object mock = invoc原创 2016-08-23 15:42:32 · 1993 阅读 · 0 评论 -
Apk获得系统权限的方法
方法1:通过将项目作为一个模块,放到Android系统源码中进行编译~~~步骤如下:在应用程序的AndroidManifest.xml中的manifest节点中加入”android:sharedUserId=”android.uid.system”这个属性。<manifest xmlns:android="http://schemas.android.com/apk/res/android"转载 2016-09-12 16:37:26 · 3880 阅读 · 0 评论 -
Android Studio 2.2 NDK开发 opencv 人脸识别
一、开发环境准备 1、Android Studio到 2.2版本,在sdk Manager中下载 ndk-bundle 和 cmake 2、下载OpenCV for Android 下载地址:http://opencv.org/downloads.html 二、搭建环境 1、使用Android Studio 新建一个项目(在c++ suport 上打上对勾) 2、带项目创建好之后,将ope原创 2016-11-17 15:13:16 · 3597 阅读 · 2 评论 -
使用Ubuntu16下载编译Android6.0源码
一、环境准备 本人使用VirtualBox安装Ubuntu16系统。 1、安装git、curl 2、使用curl下载repo。(repo实际是一个用来下载源码的python脚本) 二、下载 1、创建存放源码的目录。 2、使用repo初始化并指定要下载Android源码版本 3、使用repo sync 下载 三、编译 1、下载openjdk 7.0 2、配置编译源码需要的依赖包。原创 2016-12-05 09:52:49 · 6372 阅读 · 2 评论 -
Android使用libjpeg实现图片压缩
一、Android中使用的图片压缩库 Android和IOS 中图片处理使用了一个叫做skia的开源图形处理引擎。他位于android源码的/external/skia 目录。我们平时在java层使用一个图片处理的函数实际上底层就是调用了这个开源引擎中的相关的函数。 二、Android 中常用的压缩方式 Android中常用压缩方法分为2种:一种是降采样率压缩,另外一种是质量压缩。 代码:原创 2016-12-22 15:39:19 · 9077 阅读 · 7 评论 -
Android移植带有libx264实现的ffmpeg
一、环境准备 1、Ubuntu系统(我使用VirtualBox搭建的虚拟机)。 2、最新的ffmpeg源码 3、最新的libx264的源码二、开始搞事情 1、下载最新的ffmpeg、x264源码 大家可以器ffmepg、x264的官网去下载然后解压到本地、也可以使用git直接clone ffmpg: http://ffmpeg.org/download.html原创 2016-12-30 13:05:39 · 5295 阅读 · 4 评论 -
Android视频编码器
一、目的 在Android上使用FFmpeg将摄像头采集的YUV裸流编码为h264。 二、环境准备 1、使用FFmpeg动态库(这个动态库需要有libx264的实现,否则可能会出现寻找编码器失败异常)。关于如何获得这样的一个动态库可以参考http://blog.csdn.net/a992036795/article/details/53941436 2、Android开发环境(我用的是And原创 2017-01-04 16:53:00 · 4136 阅读 · 0 评论