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 ...
随机推荐
- visual studio2015从git上clone(克隆)项目
本文介绍Visual Studio2015从git上clone项目代码的步骤. 1.打开VS2015,进到起始页,打开"团队资源管理器",如下图: 2.点击"克隆&quo ...
- LeetCode Reverse String
原题链接在这里:https://leetcode.com/problems/reverse-string/ 题目: Write a function that takes a string as in ...
- Windows Live Writer体验
[安装] 首先下载安装包安装软件,没啥好说的,baidupan有记录: 顺便下载两个工具,备用: a)SourceCodePlugin_version_1.1.zip 将WindowsLiveWrit ...
- 微信小程序(应用号)资源汇总整理
微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...
- java编程思想 一切都是对象
java是一种面向对象程序设计语言,一切都是对象,并且用引用操作对象,如一个电视机就是一个对象,而操作电视机的遥控器就是引用,引用可以单独存在,如遥控器可以单独存在. String s; 这里只是创建 ...
- eclipse下导入jdk源码
一直想好好看看jdk的源码,虽然可以直接解压jdk下的src看,但是终究不方便!后来发现可以导入到eclipse中,就在网上找了一些方法,下面就和大家分共享: step1:打开eclipse选择Win ...
- LuaSrcDiet工具介绍(lua源码处理软件)
Diet Food Diet (nutrition), the sum of the food consumed by an organism or group Dieting, the delibe ...
- PHP中的SESSION机制
[转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧. c ...
- Jquery操作select,左右移动,双击移动 取到所有option的值
$(function () { function MoveItem(fromId, toId) { $("#" + fromId + " option:selected& ...
- "_OBJC_CLASS_$_AddFriendPageItem", referenced from:
该出错是指:有些头文件没有导入到 TARGETS 中的Build Phases - Compile Sources 中