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 ...
随机推荐
- EasyUI树和Ztree树冲突问题
1.今天做项目的时候出现了如下的错误. 报错:TypeError: $(...).tree is not a function 代码如下: 这是EasyUI的页面部分 $(function(){ $( ...
- 关于iOS和android自定义包的名字
自定义包名的使用,android的包名和ios的包名都是你的自定义包名!如下以新浪微博SDK自定义包名示例:(官方没的,自己踩过坑,方便后来人吧) 相关技术文档:http://www.apicloud ...
- Could not find class 'android.support.v4.view.ViewPager', referenced from me
http://www.ithao123.cn/content-8236579.html 按照上面链接说的来做,弄完Clean一下项目,就可以运行.
- 彻底卸载Oracle
彻底卸载Oracle 用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设置 ...
- Learning From Data 第一章总结
之前上了台大的机器学习基石课程,里面用的教材是<Learning from data>,最近看了看觉得不错,打算深入看下去,内容上和台大的课程差不太多,但是有些点讲的更深入,想了解课程里面 ...
- android 编译过程
引用:http://www.cnblogs.com/devinzhang/archive/2011/12/20/2294686.html http://blog.sina.com.cn/s/blog_ ...
- java第六次作业(老师讲过后)
import java.util.*; public class Draw { private ArrayList list; public Draw() { list= new ArrayList( ...
- python学习笔记之迭代器和函数(第三天)
一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...
- python基础入门一(语法基础)
作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...
- 在.NET中使用JQuery 选择器精确提取网页内容
1. 前言 相信很多人做开发时都有过这样的需求:从网页中准确提取所需的内容.思前想后,方法无非是以下几种:(本人经验尚浅,有更好的方法还请大家指点) 1. 使用正则表达式匹配所需元素.(缺点:同类型的 ...