Android 第八课时 by姚鑫
2020-01-17 14:46:18 5 举报
AI智能生成
Andorid
作者其他创作
大纲/内容
服务Service
简介
Android中实现程序后台运行的解决方案,执行那些不需要和用户交互还要长期运行的任务
服务的运行不依赖任何用户界面,即使被切换到后台,或者打开其他APP,服务仍然保持运行
服务不会自动开启线程,所有代码默认运行在主线程中
服务并不是独立运行进程当中,依赖的app被杀掉,进程服务也会停止
基本用法
创建一个服务
右键项目->New->Service-Service
AndroidManifest自动创建
4个方法
onCreate()
创建时调用,只调用一次
onStartCommand(Intent intent, int flags, int startId)
一旦启用就立刻调用,每次都会调用
onBind(Intent intent)
绑定时调用
onDestroy()
摧毁时调用
前台服务
后台服务,当内存不足的时候会被杀掉,如果希望一直运行,可以使用前台服务
例如,听歌,天气预报
startForeground会让服务变成前台服务
IntentService
解决服务里不能做耗时操作,子线程问题
执行完毕后服务自动停止
系统服务
打电话,震动等
通知Notifacation
简介
Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现
基本用法
定义通知管理器NotificationManager通过(NotificationManager)
调用getSystemService()方法获取对象
接收一个字符串确认获取系统哪个服务
NOTIFICATION_SERVICE
接下来通过Builder构造器创建Notification对象
setContentTitle
通知的标题内容
setContentText
通知的正文内容
setWhen
通知被创建的时间
setSmallIcon
通知的小图标
setLargeIcon
通知的大图标
setVibrate(new long[]{0, 1000, 1000, 1000})
添加震动
setLights(Color.GREEN, 1000, 1000)
LED灯
setDefaults(NotificationCompat.DEFAULT_ALL)
默认效果
setStyle
.setStyle(new NotificationCompat.BigTextStyle().bigText())
设置超长文字
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture())
设置图片
最后调用NotificationManager的notify()方法即可
第一个参数ID表示每个通知所指定的ID都是不同的
第二个参数是Notification对象
PendingIntent
与Intent区别
Intent更加倾向于立即执行某个动作
PendingIntent更加倾向于在某个合适的时机去执行某个动作
静态方法
getActivity()
getBradcast()
getService()
接收参数
第一个参数Content
第二个参数一般用不到,通常都是传入0即可
第三个参数是一个Intent参数
第四个参数用于确定PendingIntent的行为,通常为0
FLAG_ONE_SHOT
得到的pi只能使用一次,第二次使用该pi时报错
FLAG_NO_CREATE
当pi不存在时,不创建,返回null
FLAG_CANCEL_CURRENT
每次都创建一个新的pi
FLAG_UPDATE_CURRENT
不存在时就创建,创建好了以后就一直用它,每次使用时都会更新pi的数据
2种取消通知方法
setAutoCancel(true)
manager.cancel(1);
参数notify()的ID
多线程
简介
当我们执行一些耗时的操作,比如说发起一条网络请求时,考虑到网速等其他原因,服务器未必会立刻响应我们,如果放到主线程,可能会引起ANR
基本用法
new Thread(new Runnable() {}).start();
消息处理机制
4部分
Message
在线程之间传递消息,它可以内部携带少量的信息,在不同线程之间交换数据
Handler
主要用于发送和处理消息的
sendMessage()发送消息
handleMessage()处理消息
MessageQueue
消息队列,单例模式,存放所有消息
Looper
每个线程中MessageQueue的管家
调用Looper的loop()方法后,进入到无限循环中
每当存在一条消息,它就会取出,传递到handleMessage当中
每个线程只会有一个Looper对象
AsyncTask
基本用法
是一个抽象类
3个泛型参数
Params
在执行AsyncTask时需要传入参数,可用于在后台任务中使用
Progress
后台任务执行时,可以显示进度条,进度单位
Result
任务执行完毕后,对结果进行返回
4个方法
onPreExecute()
任务开始之前调用
doInBackground(Integer... integers)
这个方法所有操作都在子线程运行,处理耗时任务,不允许更新UI
onProgressUpdate(Integer... values)
通过低啊用publishProgess方法更新进度条,可以操作UI
onPostExecute(String s)
当任务执行完毕后,调用此方法,更新UI
0 条评论
下一页