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 ...
随机推荐
- MySQL的几个概念:主键,外键,索引,唯一索引
概念: 主键(primary key) 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的唯一和 ...
- Android Scroller简单用法
Android里Scroller类是为了实现View平滑滚动的一个Helper类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(conte ...
- 利用pip安装模块(以安装pyperclip为例)
>任务:利用pip安装pyperclip模块 >前提:你已经在你的电脑里面安装啦Python2.7的Windows版本,并且已经配置了环境变量 >实现步骤 >>打开你的P ...
- css ul li 横向排列
因为li是块级元素,默认占一行的,要想实现横向排列,一般通过以下两个方法:float:left这样设置有一个问题,li浮动以后则脱离了文本流,即不占位置,如果它的父级元素有具体的样式且没有固定宽高,建 ...
- [转]理解I/O Completion Port
原文:http://dev.gameres.com/Program/Control/IOCP.htm 另附上:http://stackoverflow.com/questions/5283032/i- ...
- TCP心跳 | TCP keepAlive(转)
应用层对于每个socket采用如下函数来开启 keepalive机制,其参数将采用系统上述配置. setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&a ...
- Leetcode: Design Snake Game
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- 虚拟机下CentOS 6.5配置IP地址的三种方法
实验软件环境:虚拟机Vmware Workstation10.0 .CentOS 6.5 32位 1.自动获取IP地址 虚拟机使用桥接模式,相当于连接到物理机的网络里,物理机网络有DHCP服务器自动分 ...
- android 多媒体数据库(非原创)
推荐文章:http://fzlihui.iteye.com/blog/1097952,http://www.cnblogs.com/pen-ink/archive/2011/06/02/2068410 ...
- Python爬虫爬取糗事百科段子内容
参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import ...