Android开发有一段事件了,是时候整理了,网上有很多好的博客整理的比较好,我顺便就抄写下来,也算是对自己的巩固吧。
下面是Activity类与生命周期有关的方法:
onCreate : 创建页面
onStart : 开始页面
onStop : 停止页面
onResume : 恢复页面
onPause : 暂停页面
onDestroy : 销毁页面
onRestart : 重启页面
onNewIntent : 重用栈中已存在的实例
onSaveInstanceState : 保存实例状态。使用场景:1、从A视图跳转到B视图,需要保存A视图的状态(不考虑特殊情况);2、屏幕从竖屏变为横屏,需要保存竖屏时的视图状态,从横屏变为竖屏亦然;3、当前Activity处于后台,系统因资源紧张将其杀死。
onRestoreInstanceState : 恢复实例状态。使用场景:1、屏幕从竖屏变为横屏,横屏显示时需要恢复之前保存的竖屏状态;2、activity后台运行被系统杀死。此处注意,从B视图返回A视图时并不调用该方法。
Intent用于处理Android各组件之间的通讯。Intent完成的工作主要有三部分:
1、Intent需标明本次通讯请求是从哪里来,到哪里去,要怎么走;
2、发起方携带上本次通讯需要的数据内容,接收方则对收到的Intent数据进行解包;
3、如发起方要求判断接收方的处理结果,Intent还需负责传回应答的数据内容;
Intent由以下部分组成:
Component : 组件,用于指定Intent的来源与目的
Action : 用于指定Intent的动作
Data(即Uri) : 用于指定动作要操纵的数据路径
Category : 用于指定动作的类别
Type : 数据类型,用于指定Data类型的定义
Extras : 扩展信息,用于指定装载的参数信息
Flags : 标志位,用于指定Intent的运行模式(也叫启动标志)。详细说明见上一节的《Android开发笔记(三十九)Activity的生命周期》。
广播的调用方法
sendBroadcast : 发送广播
registerReceiver : 注册接收器,一般在onStart或者onResume方法中注册
unregisterReceiver : 注销接收器,一般在onStop或者onPause方法中注销
基本的手势事件主要有如下三个方法:
dispatchTouchEvent : 判断该事件是否需要下发。返回true表示需要下发给下级视图,返回false表示不需要下发(交给自身的onTouchEvent处理)。但是否最终下发,还需根据onInterceptTouchEvent的拦截结果。
onInterceptTouchEvent : 判断当前容器是否需要拦截该事件。返回true表示予以拦截(交给自身的onTouchEvent处理)、不放给下级视图,返回false表示不拦截该事件。
onTouchEvent : 判断该事件是否处理完毕。返回true表示处理完毕,则无需处理上级视图的onTouchEvent,一路返回结束流程。返回false表示该事件未完成,则返回继续处理上级视图的onTouchEvent,然后再根据上级onTouchEvent的返回值判断是直接结束还是由再上级处理。
手势事件的生命周期
控件响应
Activity.dispatchTouchEvent(返回true)->ViewGroup.dispatchTouchEvent(返回true)->ViewGroup.onInterceptTouchEvent(返回false)->View.dispatchTouchEvent(返回true)->View.onTouchEvent(返回true)->结束
TouchEvent
下面是触摸事件的常用方法:
getAction : 获取当前的动作
getX : 获取当前在控件内部的相对坐标X
getY : 获取当前在控件内部的相对坐标Y
getRawX : 获取当前在屏幕上的相对坐标X
getRawY : 获取当前在屏幕上的相对坐标Y
getEventTime : 获取当前的事件时间
弹性滑动
滑动计算器Scroller
Scroller是Android用于计算滑动参数的辅助类,常用方法如下:
startScroll : 设置开始滑动的参数,包括起始的xy坐标、xy偏移量,另一个重载的方法还可以设置滑动的持续时间。
computeScrollOffset : 计算滑动偏移量。返回值可判断滑动是否结束,返回fasle表示滑动结束,返回true表示还在滑动当中。
getCurrX : 获得当前的X坐标
getCurrY : 获得当前的Y坐标
getDuration : 获得滑动的持续时间
forceFinished : 强行停止滑动
isFinished : 判断滑动是否结束。返回fasle表示还未结束,返回true表示滑动结束。该方法与computeScrollOffset的区别在于:1、computeScrollOffset内部还有计算偏移量,而isFinished只返回标志不做其他处理;2、computeScrollOffset返回fasle表示滑动结束,而isFinished返回true表示滑动结束。
scrollTo : 将控件滑动到指定坐标位置
View的滑动方法
虽然Scroller提供了滑动的相关计算函数,但是Scroller本身并不能直接滑动控件。因为Scroller只是个运算模拟器,根据时间的流逝计算xy坐标,所以我们必须调用控件自身的滑动方法,才能真正让控件动起来。View类中操纵滑动的方法有两个:
scrollTo : 将控件滑动到指定坐标位置
scrollBy : 将控件滑动指定偏移量。查看源码会发现scrollBy内部就是调用scrollTo,当然得先把当前坐标加上偏移量,从而得到滑动后的绝对坐标。
一、采用Handler类的post方法
Handler常用的post方法有下面几种:
post : 立即启动Runnable
postDelayed : 延迟指定时间间隔后启动Runnable
postAtTime : 在指定时间启动Runnable
removeCallbacks : 回收/移除指定的Runnable
AsyncTask是个模板类(AsyncTask<Params, Progress, Result>),继承它的新类需要指定模板的参数类型,模板参数说明如下:
Params : 任务启动时的输入参数,比如http访问的url、请求参数等等。可设置为String类型或者自定义的数据结构
Progress : 任务执行的进度。可设置为Integer类型
Result : 任务执行完的结果。可设置为String类型或者自定义的数据结构
doInBackground : 异步处理操作都放在该方法中,params参数对应execute方法的输入参数。该方法运行于分线程,所以不能操作UI,其他方法都能操作UI
onPreExecute : 在doInBackground执行之前调用
onProgressUpdate : doInBackground方法中调用publishProgress时会触发该方法,通常用于处理过程中刷新进度条
onPostExecute : 在doInBackground执行完毕时调用,通常用于处理完毕后刷新展示页面
onCancelled : doInBackground方法中调用cancel时会触发该方法
定时器:Timer和TimerTask,CountDownTimer,AlarmManager
权限申请
通过前面对设备的基本操作介绍,可看到Android四大组件各显神通,各组件协同配合完成了许多功能。具体的组件使用分类如下:
1、Activity:包括拨号(Intent.ACTION_CALL)、手工发短信(Intent.ACTION_SENDTO)、发邮件(Intent.ACTION_SEND)、系统设置页面(Settings.ACTION_SETTINGS)以及其他分项设置页面。
2、Service:包括获取子系统服务的管理器,如电话管理器TelephonyManager(Context.TELEPHONY_SERVICE)、定位管理器LocationManager(Context.LOCATION_SERVICE)、蓝牙管理器BluetoothAdapter(BLUETOOTH_MANAGER_SERVICE)、WLAN管理器WifiManager(Context.WIFI_SERVICE)、数据连接管理器ConnectivityManager(Context.CONNECTIVITY_SERVICE)。
3、Broadcast:包括开关飞行模式、开关GPS、自动发送短信的发送成功通知与接收成功通知。
4、ContentProvider:包括通过ContentResolver获取与开关的功能,如屏幕自动旋转、亮度自动调节、飞行模式等等。
json
json的常用方法有:
JSONObject构造函数 : 从指定字符串构造出一个JSONObject对象
JSONObject.getJSONObject : 获取指定名称的JSONObject对象
JSONObject.getString : 获取指定名称的字符串值
JSONObject.put : 添加一个json元素
JSONObject.toString : 把当前JSONObject输出为一个json字符串
JSONObject.getJSONArray : 获取指定名称的json对象数组
JSONArray.length : 获取json对象数组的大小
JSONArray.getJSONObject : 获取json对象数组在指定位置处的JSONObject对象
JSONArray.put : 往json对象数组中添加一个JSONObject对象
URL编码,BASE64编码。MD5加密,RSA加密,3DES加密
内存泄漏的场景
在Android开发中,内存泄漏可能发生在如下几个场景:
1、查询操作后,没有关闭游标Cursor;
2、刷新适配器Adapter时,没有重用convertView对象;
3、Bitmap对象使用完毕,没有调用recycle方法回收内存;
4、给系统服务注册了监听器,却没有及时注销;
5、Activity引用了耗时对象,造成页面关闭时无法释放被引用的对象;
picasso
picasso是Square公司开源的一个Android图片缓存库
Universal-Image-Loader
Universal-Image-Loader是个广泛应用的图片加载框架,它的功能比Picasso更丰富,当然用起来也会复杂一些。
Java的异常分两类,运行时异常RuntimeException和非运行时异常。
运行时异常包括空指针异常NullPointerException、数组越界异常IndexOutOfBoundsException、类型转换异常ClassCastException、数据库异常SQLException等等,(网上很多文章把SQLException归为非运行时异常,但查看源码SQLException继承自RuntimeException,所以它应是运行时异常)。非运行时异常包括输入输出异常IOException、无此加密算法异常NoSuchAlgorithmException等等。
非运行时异常在编码的时候就要进行处理,不然编译都通不过。运行时异常有的在程序运行时才会发现,但也有的在编码时就得处理,比如说非法参数异常IllegalArgumentException、非法状态异常IllegalStateException等等。