
Android
文章平均质量分 94
志见
志见,见我所见。
展开
-
Android之异步消息处理机制详解
一、在子线程中更新UI概述和许多其他的GUI 库一样,Android 的UI 也是线程不安全的。也就是说,如果想要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常。但是有些时候,我们必须在子线程里去执行一些耗时任务,然后根据任务的执行结果来更新相应的UI 控件,这该如何是好呢?对于这种情况,Android 提供了一套异步消息处理机制,完美地解决了在子线程中进行UI 操作的问题。二、原创 2016-11-01 14:52:22 · 1010 阅读 · 0 评论 -
ImageLoader: java.io.FileNotFoundException: /storage/sdcard0/Android/data/[...]/cache/uil-images/jo
插拔SD卡出现:01-23 15:48:00.512 2385 2385 E ImageLoader: /storage/sdcard0/Android/data/com.android.customerservice/cache/uil-images/journal.tmp: open failed: EIO (I/O error)01-23 15:48:00.512 2385 2385原创 2016-01-27 19:13:13 · 6713 阅读 · 0 评论 -
Android之ViewPager+Fragment实现页面点击切换和手势滑动
使用ViewPager+Fragment实现页面点击切换和手势滑动,效果图如下: 源码下载地址: http://download.youkuaiyun.com/detail/wei_zhi/9422590 布局文件activity_main.xml如下:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://sc原创 2016-01-29 20:17:25 · 18118 阅读 · 5 评论 -
Android 从系统图库中选择图片
直接从系统图库中选择图片。具体功能如下: (1)从手机图库中最多选择3张图片,每次只能选择一张; (2)选择的图片可以点击移除然后再添加新图片; 本博客主要实现的是以上功能,其他诸如主界面布局、各种控件添加和提交功能等旨在说明问题,只做了简单处理,重点在图片选择添加部分。 截图如下: 在这里提供源码下载地址,有兴趣的读者可以下载观看(注:我使用的 Android Stud原创 2016-02-16 20:01:45 · 1816 阅读 · 0 评论 -
Android 仿微信图片选择器
最近做开发需要解决一个模仿微信朋友圈附加图片的功能,具体要求如下: (1)从手机中最多选择3张图片,可拍照上传; (2)选择的图片可以点击移除然后再添加新图片; (3)可以在手机包含图片的各个文件夹中随意选择等。 本博客主要实现的是以上功能,其他诸如主界面布局、各种控件添加和提交功能等旨在说明问题,只做了简单处理,重点在图片选择添加部分。该功能的实现主要引用了一个图片加载的开源框架u原创 2016-02-16 20:09:34 · 809 阅读 · 1 评论 -
Android使用LruCache缓存图片
最近做项目遇到了一个频繁加载图片导致OOM的问题,做了一个多张图片轮播的东西,点击每张图片跳转浏览器打开网页,退出浏览器后又重新加载图片进行轮播,这样进行多次,因为上次加载使用的内存没有释放掉,导致每次占用的内存都会多一点,最后直接就报停了。 如图: 在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakRefere原创 2016-03-29 22:07:57 · 854 阅读 · 0 评论 -
Android获取内存(RAM)大小信息
Android手机的内存大小信息存放在手机系统的/proc/meminfo文件里面,我们可以通过读取这个文件来获取内存信息。 运行adb命令我们可以看到文件详细内容: 下面介绍常见的几项: (1)MemTotal: 所有可用RAM大小。(即物理内存减去一些预留位和内核的二进制代码大小) (2)MemFree: LowFree与HighFree的总和,被系统留着未使用的内存。 (3)Buff原创 2016-04-02 19:10:35 · 22726 阅读 · 1 评论 -
Android性能优化之常见的内存泄漏
内存泄漏为什么会产生内存泄漏?当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。内存泄漏对程序的影响?内存泄漏是造成应用程序OOM的主要原因之一!我们知道Android系统为每个应用程序分配的内存有限,而当一个应用中产生的内存泄漏比较多时,这就难免会导致应用所需要的内存超过这个转载 2016-08-30 16:53:19 · 422 阅读 · 0 评论 -
Android之数据存储详解(三)之网络存储数据
前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,通过网络来实现数据的存储和获取。我们可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。【以下案例转载自http://blog.youkuaiyun.com/liranke/article/details/7670595】 下面是一个通过地区名称查询该地区的天气预报,以POST发送的方式发送请求到w转载 2016-10-27 18:56:19 · 1675 阅读 · 0 评论 -
Android之数据存储详解(二)之SQLite数据库存储数据
上一篇 Android之数据存储详解(一)讲解了文件存储数据和使用SharedPreferences存储数据,接下来讲解 SQLite数据库存储数据。一、SQLite数据库简介SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windo原创 2016-10-27 12:28:58 · 1840 阅读 · 2 评论 -
Android之Service详解(二)
上一篇Android之Service详解(一)讲解了Service的定义、开启和关闭以及生命周期,接下来讲解Service与Activity间的通信,以及IntentService等内容。一、Service与Activity间的通信在上一篇中我们学习了启动和停止服务的方法,不知道你有没有发现,虽然服务是在活动里启动的,但在启动了服务之后,活动与服务基本就没有什么关系了。确实如此,我们在活动里调用了s原创 2016-10-25 16:42:41 · 562 阅读 · 0 评论 -
Android之Service详解(一)
一、Service简述Service是Android四大组件之一,通常称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,使用Service可以在后台执行长时间的操作,Service并不与用户产生UI交互。其他的应用组件可以启动Service,即便用户切换了其他应用,启动的Service仍可在后台运行。一个组件可以与Service绑定并与之交互,原创 2016-10-25 11:17:31 · 715 阅读 · 0 评论 -
Android之BroadcastReceiver详解
本博文是《第一行代码 Android》的读书笔记摘录。一、广播机制简介Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。Android 中的广播主要可以分为两种类型,标准广播和有序广播。标准广播(原创 2016-10-25 21:33:41 · 950 阅读 · 0 评论 -
MTK 平台 Android L版本差分包制作
需要两个代码库(V1代码库和V2代码库)来构建V1_2差分OTA更新映像,如下步骤【注:在make -j24之前需要source build/envsetup.sh 和lunch 】:1、将目录切到V1代码库的根目录下; 2、执行命令:make -j24 编译; 3、执行命令:make -j24 otapackage生产完整包和基准包; 4、备份完整包; 5、备份基准包到制定目录:基准包为o原创 2016-01-09 21:23:21 · 3954 阅读 · 0 评论 -
Android5.0实现全透明状态栏效果
效果如图: public class MainActivity extends Activity { @SuppressLint("InlinedApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);原创 2016-01-09 19:38:34 · 504 阅读 · 0 评论 -
Android之AsyncTask详解
一、AsyncTask介绍AsyncTask:异步任务,从字面上来说,就是在我们的UI主线程运行的时候,异步的完成一些操作。AsyncTask允许我们在后台执行一个耗时的异步的任务,并随时将任务执行的结果返回给我们的UI线程来更新我们的UI控件。AsyncTask 背后的实现原理是基于异步消息处理机制的,只是Android 帮我们做了很好的封装而已。AsyncTask允许在UI线程上执行后台操作和发原创 2016-10-30 19:56:02 · 1724 阅读 · 0 评论 -
Android之使用HttpURLConnection进行网络访问
一、概述在Android 上发送HTTP 请求的方式一般有两种:HttpURLConnection 和HttpClient。因为在Android 5.0之后,HttpClient被HttpURLConnecetion替代,后来在Android 6.0完全被舍弃,所以本文重点讲解HttpURLConnecetion。二、HttpURLConnecetion的使用步骤(1)首先需要获取到HttpURLC原创 2016-11-01 16:34:54 · 5833 阅读 · 1 评论 -
Android之Activity的生命周期
一、典型情况下Activity的生命周期(一)七个生命周期 1、onCreate:生命周期的第一个方法,表示Activity正在被创建;2、onRestart:当当前Activity从不可见重新变为可见状态时被调用,表示Activity正在被重新启动;3、onStart:表示Activity正在被启动,这是Activity已经可见,但还没出现在前台,但用户看不到,还无法和用户进行交互;4、onRe原创 2016-04-09 19:20:59 · 590 阅读 · 0 评论 -
Android之内容提供器Content Provider详解(二)
上一篇 Android之内容提供器Content Provider详解(一)讲解了Content Provider之访问其他程序中的数据,本篇继续讲解创如何建自己的内容提供器本博文是《第一行代码 Android》的读书笔记/摘录。三、创建自己的内容提供器在上一篇中,我们学习了如何在自己的程序中访问其他应用程序的数据。总体来说思路还是非常简单的,只需要获取到该应用程序的内容URI,然后借助Conten原创 2016-10-30 09:36:12 · 1215 阅读 · 0 评论 -
Android之数据存储详解(一)之文件存储和SharedPreferences存储
数据存储被广泛应用在Android中,这里主要介绍Android中实现数据存储的5种方式,分别是:1 、文件存储数据2 、使用SharedPreferences存储数据3、 SQLite数据库存储数据4 、网络存储数据5、使用ContentProvider存储数据 这几种方式各自有各自的优点和缺点,要根据不同的实际情况来选择,下面就各种方式进行详细介绍。 一、文件存储数据文件存储是Android 中原创 2016-10-26 19:31:54 · 1829 阅读 · 0 评论 -
Android之内容提供器Content Provider详解(一)
一、Content Provider简介内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性。目前,使用内容提供器是Android 实现跨程序共享数据的标准方式。不同于文件存储和SharedPreferences 存储中的两种全局可读写操作模式,内容提供器可以选择只对哪一原创 2016-10-28 21:10:29 · 1505 阅读 · 1 评论 -
Android 报错:Error: Apostrophe not preceded by \ (in ... ...)
在Android string.xml文件增加如下语言自适应描述时<string name="description">Description can't be empty!</string>遇到如下报错: 这是因为【Description can’t be empty!】中的【can’t】中的【’】字符没有得到支持,将【can’t】改为【can not】就OK了。<string name="pr原创 2015-12-27 16:51:35 · 428 阅读 · 0 评论 -
Android中strings.xml中首字符或尾字符空格无作用
我在Android中的strings.xml中如下定义,希望显示空格:<string name="max_textLength">300</string><string name="can_input">can enter </string><string name="words"> words</string>但是首尾字符的空格竟然不显示: 后来发现要在string.xml 中显示特殊符原创 2015-12-27 17:16:35 · 1462 阅读 · 0 评论 -
Android在ImageView控件中图片怎样铺满整个控件
我想让ImageView控件中的图片铺满整个控件,我设置了如下属性: <ImageView android:id="@+id/imageView" android:visibility="visible" android:layout_centerHorizontal="true" andr原创 2015-12-27 17:36:09 · 38913 阅读 · 1 评论 -
Android使用HttpURLConnection进行POST请求,向服务器上传数据
先在清单文件中需要添加权限:<uses-permission android:name="android.permission.INTERNET"/> 开始使用HttpURLConnection进行POST请求,向服务器上传数据: (1)定位到要获取资源的网址并打开连接:URL url = new URL(String urlPath);HttpURLConnection httpURLCon原创 2015-12-27 19:45:38 · 12801 阅读 · 2 评论 -
Android出现CursorWindow: Window is full: requested allocation 1354087 bytes, free space 141032 bytes,
在使用SQLiteDatabase插入一个比较大的数据时,抛出如下异常: W/CursorWindow: Window is full: requested allocation 1354087 bytes, free space 141032 bytes, window size 2097152 bytes如下图所示: 这是因为: Android SQLite在光标返回行的窗口是指定了一个最大原创 2016-01-09 19:13:05 · 10349 阅读 · 0 评论 -
Android在mtk平台上获取手机内置存储卡路径
首先,通过反射机制获取swap开关的值: /** * 通过反射机制获取swap开关的值 * * @return */ public static String getSwap() { Object result = null; try { Class cl = Class.forName("and原创 2015-12-28 20:47:08 · 1235 阅读 · 0 评论 -
Android之IntentService
我们知道,服务中的代码都是默认运行在主线程当中的,如果直接在服务里去处理一些耗时的逻辑,就很容易出现ANR(Application Not Responding)的情况。所以这个时候就需要用到Android 多线程编程的技术了,我们应该在服务的每个具体的方法里开启一个子线程,然后在这里去处理那些耗时的逻辑。因此,一个比较标准的服务就可以写成如下形式:public class MyService ex原创 2016-10-25 16:59:38 · 504 阅读 · 0 评论 -
Android 之 Activity的启动模式(launchMode)
Activity一共有以下四种launchMode:1.standard2.singleTop3.singleTask4.singleInstance一、标准模式(standard)系统的默认模式,每次通过这种模式启动Activity时,,Android总会为启动的Activity创建一个新的实例,不管这个实例说是否存在,并将该Activity添加到当前Task栈中,这种模式不会创建新的Task,只原创 2016-04-09 19:52:43 · 558 阅读 · 1 评论 -
Android之图片工具类ImageUtil
package com.android.myimageutil;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;im原创 2016-01-05 21:35:09 · 792 阅读 · 0 评论 -
Android之禁止GridView上下滑动
在Android开发中,我们经常使用到GridView控件,并且需要禁止GridView上下滑动,但是,Android并没有提供对应的API来禁止GridView上下滑动,也没有在XML布局文件中提供对应的属性来禁止GridView上下滑动。这如何是好呢,我们可以这样做:重写GridView的dispatchTouchEvent()方法:import android.content.Contex原创 2015-11-29 10:49:27 · 835 阅读 · 0 评论 -
Android之设置EditText输入类型(setInputType()方法和android:inputType属性)
在Android开发过程中,我们经常使用到EditText控件,并且会根据各种需求设置它的输入类型。设置EditText输入类型主要有两种方法,一种是使用EditText的setInputType()方法,另一种是在布局文件中使用android:inputType属性来设置。 下面将介绍这两种方法:(1)使用EditText的setInputType()方法设置输入类型: EditTe原创 2015-11-29 10:45:53 · 20293 阅读 · 1 评论 -
Android之不能静态注册的系统广播(5个)
在Android开发中,有些系统广播是不能在清单文件中静态注册的,只能通过registerReceiver方法进行动态注册(Android文档这样描述:You cannot receive this through components declared in manifests, only by explicitly registering for it with {@link Context原创 2015-11-29 10:47:17 · 1271 阅读 · 0 评论 -
Android之设置横屏、竖屏和全屏显示
Android设置横屏、竖屏和全屏显示有两种方式: 1、在Java代码中设置: (1)设置横屏显示: 修改Activity的onResume方法:@Overrideprotected void onResume() { /** * 设置为横屏 */ if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION原创 2015-11-29 10:43:22 · 2661 阅读 · 0 评论 -
Android之将字符串转换为MD5码
MD5(Message-Digest Algorithm 5 ,消息摘要算法第五版),被广泛用于加密和解密技术上,它可以说是文件的“数字指纹”。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被“篡改”过。M原创 2015-11-29 10:41:50 · 1755 阅读 · 0 评论 -
Android之获取手机IMEI号和IMSI号
首先我们看一下IMEI号和IMSI号是什么: (1)IMEI(International Mobile Equipment Identity,国际移动身份识别码):是由15位数字组成的”电子串号”,其组成结构为TAC(6位数字)+FAC(两位数字)+SNR(6位数字)+SP (1位数字)。它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码原创 2015-11-29 10:40:26 · 1519 阅读 · 0 评论 -
Android之系统Log输出日志的封装类LogUtil
在Android开发过程中经常用到Log,在日志打印中,我们需要频繁定义日志的TAG,并且日志内容不能输出方法名,线程ID以及行数等。于是就定义了一个基于这个需求的日志辅助类——LogUtil工具类。自定义的LogUtil工具类如下:package com.mylogutiltest;import android.util.Log;import java.util.Locale;public cl原创 2015-11-29 10:37:50 · 2584 阅读 · 0 评论 -
Android之自定义dialog
最近做开发需要用到一个自定义的dialog,在网上浏览了很多这方面的问题,基本都写的比较复杂难懂(对菜鸟来说),需要extends Dialog或者修改style之类的,最后自己写了一个dialog(不算是真正意义上的dialog),很好的解决了我所遇到的问题。下面,将我的做法分享给大家。我是使用Android Studio 1.4,基于android5.1写的一个demo。MainActivity原创 2015-11-29 10:19:59 · 610 阅读 · 0 评论 -
Android之拨打电话
Android拨号功能需要在AndroidManifest.xml功能清单中加入允许拨打电话的权限:<uses-permission android:name="android.permission.CALL_PHONE" />1、直接拨打电话: /** * 直接拨打电话 * @param context * @param phoneNumber */原创 2015-12-12 21:01:31 · 427 阅读 · 0 评论 -
Android之判断是否有SD卡、SIM卡
判断是否插入SD卡: /** * 判断手机是否有SD卡。 * * @return 有SD卡返回true,没有返回false。 */ public static boolean isHaveSDCard(){ if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalSto原创 2015-12-12 20:32:53 · 2169 阅读 · 0 评论