Service服务
Android多线程:
定义线程的2种方式:
1、继承Thread类,重写run()方法,new一个实例,用start()方法启动:new MyThread().start();
2、实现Runnable接口:new Thread(new Runnable()){实现run()}
子线程中更新UI:
子线程中不允许更新UI,如果想在子线程中更新UI需要用到异步消息处理机制。
异步消息处理机制:
组成部分:Message:线程之间传递的消息,用于在不同线程之间交换数据。
Handler:用于发送和处理消息。sendMessage()、handleMessage()
MessageQueue:消息队列。存放通过handler发送的消息。每个线程中只有一个MessageQueue
Looper:MessageQueue的管家,调用loop()循环从MessageQueue中取出消息传递到handleMessage()中进行处理。每个线程中只有一个Looper。
步骤:1、主线程中创建一个Handler对象
2、重写handleMessage()方法
3、当子线程中需要进行UI操作时,创建一个Message对象,并通过Handler将消息发送出去。
4、之后消息将会被存放到MessageQueue队列中等待处理,Looper会一直尝试从MessageQueue中取消息,最后分发给handleMessage()。
Handler是主线程创建的,所以handleMessage运行在主线程中,所以可以进行UI操作。
public class MainActivity extends Activity{
public static final int UPDATE_TEXT = 1;
private TextView text;
private Button changeText;
private Handler handler = new Handler();
public void handleMessage(Message msg){
switch(msg.what){
case UPDATE_TEXT:
//进行UI操作
text.setText("Nice to meet you");
break;
default:
break;
}
}
public void onClick(View v){
switch(v.getId){
case R.id.change_text:
new Thread(new Runnable(){
public void run(){
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message);
}
}).start();
break;
default:
break;
}
}
}
AsyncTask(抽象类)
用法:通过创建一个子类继承AsyncTask:class DownloadTask extends AsyncTask<Void,Integer,Boolean>{...},三个参数分别代表:Params(传入的参数),Progress(进度),Result(结果)
方法:onPreExecute():初始化操作
doInBackground(Params...):子线程中运行,处理耗时操作。完成后返回执行结果。调用publicProgress(...)来完成反馈。
onProgressUpdate(Progress...):更新UI
onPostExecute(Result):利用返回数据进行UI操作
Service服务
创建:创建类继承Service,并重写onBind()方法
方法:onCreate()、onStartCommand()、onDestroy()
每一个服务需要在AndroidManifest.xml中注册:<Service android:name=".MyService">
启动和停止服务(借助Intent)
startService(intent对象)、stopService(Intent对象)
stopSelf()在服务中自己停止
活动与服务间的通信
1、新建类继承自Binder类,在其中设置方法
2、创建一个ServiceConnection类,重写onServiceConnected()和onServiceDisconnected()方法,用于活动与服务的绑定和解绑。
3、在onServiceConnected()中调用服务类中相关的public方法
4、通过Intent对象,调用bindService()方法将活动与服务绑定
5、调用unbindService()方法进行解绑。
前台服务(避免被回收)
public class MyService extends Service{
......
public void onCreate(){
super.onCreate();
Notification notification = new Notification(R.drawable.ic_launcher,"Notificationg comes",System.currentTimeMillis());
Intent notificationgIntent = new Intent(this,MainActivity.class);
PendingIntent pendingIntent = pendingIntent.getActivity(this,0,notificationIntent,0);
notification.setLatestEvnetInfo(this,"This is title","This is content",pendingIntent);
startForeground(1,notification); //MyService变成前台服务,并在状态栏中展示出来。
}
}
IntentService:在服务的具体方法中开启子线程处理耗时操作
1、调用父类构造方法
2、重写onHandleIntent()方法和onDestroy()方法
......
Intent intentService = new Intent(this,MyIntentService.class);
startService(intentService);
break;
......
定时任务:
Timer类:短期
Alarm机制:可以唤醒cup(推荐)
创建:AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
方法:manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,triggerAtTime,pendingIntent);
Service服务的更多相关文章
- 解决VMWARE NAT SERVICE服务无法启动或服务消失的问题
解决VMWARE NAT SERVICE服务无法启动或服务消失的问题 2016-02-02 11:18 2012人阅读 评论(2) 收藏 举报 分类: 网络通信(3) 今日使用VMware中的Wi ...
- 使用axis开发web service服务端
一.axis环境搭建 1.安装环境 JDK.Tomcat或Resin.eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4下载A ...
- win7提示“User Profile Service服务未能登录”
注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 最近,有个同事打电话告诉我说他的用户名无法登陆到系统,提示“User Profile Service服务未能登录,无法加载用户配置文 ...
- Android 通过JNI实现守护进程,使得Service服务不被杀死
来自: http://finalshares.com/read-7306 转载请注明出处: http://blog.csdn.net/yyh352091626/article/details/5054 ...
- Centos6.5 设置Tomcat8 service服务实现自启动和服务管理
Centos6.5 设置Tomcat8 service服务实现自启动和服务管理 将tomcat设置成像apache,nginx一样. 用serviec xxxx start/stop/restart ...
- Android 综合揭秘 —— 全面剖释 Service 服务
引言 Service 服务是 Android 系统最常用的四大部件之一,Android 支持 Service 服务的原因主要目的有两个,一是简化后台任务的实现,二是实现在同一台设备当中跨进程的远程信息 ...
- win8.1 user profile service 服务登录失败
在Win 8.1 上新建个用户后,不能登录. 出现 user profile service 服务登录失败. 无法加载用户配置文件. 网上大部分相同提示的问题是有关已有账号不能再次登陆的. 解决方式是 ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- 使用Eclipse自带Web Service插件(Axis1.4)生成Web Service服务端/客户端
创建一个名字为math的Java web工程,并将WSDL文件拷入该工程中 将Axis所需的jar包拷贝至WebRoot\WEB-INF\lib目录下,这些jar包会自动导入math工程中 一,生成W ...
随机推荐
- 纯手写SpringMVC架构,用注解实现springmvc过程
1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping 第二步:完成对应的anno ...
- bash小技巧
Linux 下shell基本上默认是 bash, 下面是我总结的一些技巧. & 后台运行程序 ,注意退出当前shell后 程序也会退出() 使用子shell, 比如 (cd ../../ ...
- WPF 动画效果
线性插值动画.关键帧动画.路径动画 1. (Visibility)闪烁三下,停下两秒,循环: XAML: <Grid> <Grid.ColumnDefinitions> < ...
- C# 提供两种切割圆形图片的方式
效果: private void Form1_Load(object sender, EventArgs e) { string file =System.IO.Path.Combine(Enviro ...
- 在IE下,如果在readonly的input里面键入backspace键,会触发history.back()
在IE下,如果在readonly的input里面键入backspace键,会触发history.back(), 用以下jQuery代码修正之 $("input[readOnly]" ...
- MFC打开系统关于对话框
HICON Icon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); //IDR_MAINFRAME为图标的ID ...
- Oracle EBS APIs
参考链接: http://blog.csdn.net/pan_tian/article/details/7754598 http://blog.itpub.net/26687597/viewspace ...
- 夺命雷公狗-----React---22--小案例之react经典案例todos(完成数据的遍历)
在很多前端框架中todos都是一个小的参考例子,在react中当然也是不例外的,先来看看最终的效果先... 这个就是官方的例子,我们先来分析下他是由那及格组建组合成的... 再来分析下他是的数据最终是 ...
- lucene中FSDirectory、RAMDirectory的用法
package com.ljq.one; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStrea ...
- linux 下链接无线网络
无线网卡配置此页由Linux Wiki用户Chenxing于2008年11月27日 (星期四) 09:28的最后更改. 在1233456的工作基础上.本文介绍在Linux命令行界面中手动配置无线网卡的 ...