- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 让Android应用保持灵敏响应:AsyncTask
任何可能需要较长时间的操作都不应该放在UI主线程里,而应该创建一个工作线程去处理。当前台Activity未在5秒内对用户点击事件或者BroadcastReceiver接收到广播后未在10秒内返回,Android就会抛出一个应用无响应(ANR)的对话框,以供用户选择是否关闭该应用。如何避免ANR?创建一个处理长时间操作的工作线程的最佳方式是继承AsyncTask类:// AsyncTask<Param
2015-11-25 01:30:44 695
转载 Android进程和线程
当某个应用组件启动且该应用没有运行其他任何组件时,Android 系统会使用单个执行线程为应用启动新的 Linux 进程。默认情况下,同一应用的所有组件在相同的进程和线程(称为“主”线程)中运行。 如果某个应用组件启动且该应用已存在进程(因为存在该应用的其他组件),则该组件会在此进程内启动并使用相同的执行线程。 但是,您可以安排应用中的其他组件在单独的进程中运行,并为任何进程创建额外的线程。本文档介
2015-11-24 00:10:28 464
原创 Android进程间通信(二):AIDL
AIDL (Android Interface Definition Language)即Android接口定义语言。若需多线程同时处理其他应用进程的请求才有必要使用AIDL。如果不需多线程交互,则可使用Messager(请看《Android进程间通信(一):Messager》);而如果不需跨进程通信,使用Binder即可。 AIDL接口通常与Service联合使用。客户端通过bindServic
2015-11-23 22:45:35 645
原创 任务和返回栈
打开一个最近未使用过的APP时,系统会创建一个新的任务(它是一个后进先出的栈),把APP的主Activity放入其中。默认模式下,后续启动的获得用户焦点的Activity会堆叠在栈顶。当用户按下返回键时,栈顶的Activity会被弹出销毁,并返回前一个Activity(此时为新的栈顶)。一个任务可以包含不同APP的Activity(比如APP A启动了APP B的Activity来拍照),一个Act
2015-11-21 19:47:22 487
原创 给ListView异步加载Cursor
LoaderManager 每个Activity或者Fragment只有一个LoaderManager, 它可以根据前两者的生命周期来管理若干个Loader。LoaderManager.LoaderCallbacks 它提供三个接口和LoaderManager进行互动:onCreateLoader(怎么创建一个Loader)、onLoadFinished(当某个Loader加载完毕)、onLo
2015-11-11 19:27:17 598
原创 数据保存(三):数据库
一、继承SQLiteOpenHelper类public class MySQLiteOpenHelper extends SQLiteOpenHelper { public static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "wesnoth.db";
2015-11-04 00:24:53 509
原创 数据保存(二):文件
Internal Storage指内部存储,每个应用都有属于自己的目录:/data/data/应用程序包名,适合保存较小的流式数据,比如截图、铃声等。// 如果没有context对象或者想缓存(临时)文件if(!hasContextAndNotCache){ // 1.获取文件夹 File dir = null; if(isCache) { //
2015-11-02 01:42:16 575
原创 数据保存(一):SharedPreference
方法一:SharedPreference 适合保存零散的不重要的数据, 以键值对的形式保存在/data/data/应用程序包/shared_prefs目录下的xml文件中。SharedPreferences sharedPreferences = null;// A.获取SharedPreferences对象if (noName){ // 这种方式的文件名为“Activity的类名.x
2015-11-01 23:57:04 568
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人