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