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服务的更多相关文章

  1. 解决VMWARE NAT SERVICE服务无法启动或服务消失的问题

    解决VMWARE NAT SERVICE服务无法启动或服务消失的问题 2016-02-02 11:18 2012人阅读 评论(2) 收藏 举报  分类: 网络通信(3)  今日使用VMware中的Wi ...

  2. 使用axis开发web service服务端

    一.axis环境搭建 1.安装环境 JDK.Tomcat或Resin.eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4下载A ...

  3. win7提示“User Profile Service服务未能登录”

    注:本文由Colin撰写,版权所有!转载请注明原文地址,谢谢合作! 最近,有个同事打电话告诉我说他的用户名无法登陆到系统,提示“User Profile Service服务未能登录,无法加载用户配置文 ...

  4. Android 通过JNI实现守护进程,使得Service服务不被杀死

    来自: http://finalshares.com/read-7306 转载请注明出处: http://blog.csdn.net/yyh352091626/article/details/5054 ...

  5. Centos6.5 设置Tomcat8 service服务实现自启动和服务管理

    Centos6.5 设置Tomcat8 service服务实现自启动和服务管理 将tomcat设置成像apache,nginx一样. 用serviec xxxx start/stop/restart ...

  6. Android 综合揭秘 —— 全面剖释 Service 服务

    引言 Service 服务是 Android 系统最常用的四大部件之一,Android 支持 Service 服务的原因主要目的有两个,一是简化后台任务的实现,二是实现在同一台设备当中跨进程的远程信息 ...

  7. win8.1 user profile service 服务登录失败

    在Win 8.1 上新建个用户后,不能登录. 出现 user profile service 服务登录失败. 无法加载用户配置文件. 网上大部分相同提示的问题是有关已有账号不能再次登陆的. 解决方式是 ...

  8. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  9. 使用Eclipse自带Web Service插件(Axis1.4)生成Web Service服务端/客户端

    创建一个名字为math的Java web工程,并将WSDL文件拷入该工程中 将Axis所需的jar包拷贝至WebRoot\WEB-INF\lib目录下,这些jar包会自动导入math工程中 一,生成W ...

随机推荐

  1. EasyUI树和Ztree树冲突问题

    1.今天做项目的时候出现了如下的错误. 报错:TypeError: $(...).tree is not a function 代码如下: 这是EasyUI的页面部分 $(function(){ $( ...

  2. 关于iOS和android自定义包的名字

    自定义包名的使用,android的包名和ios的包名都是你的自定义包名!如下以新浪微博SDK自定义包名示例:(官方没的,自己踩过坑,方便后来人吧) 相关技术文档:http://www.apicloud ...

  3. Could not find class 'android.support.v4.view.ViewPager', referenced from me

    http://www.ithao123.cn/content-8236579.html 按照上面链接说的来做,弄完Clean一下项目,就可以运行.

  4. 彻底卸载Oracle

    彻底卸载Oracle 用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢?那就是直接注册表清除,步骤如下: 1. 开始->设置 ...

  5. Learning From Data 第一章总结

    之前上了台大的机器学习基石课程,里面用的教材是<Learning from data>,最近看了看觉得不错,打算深入看下去,内容上和台大的课程差不太多,但是有些点讲的更深入,想了解课程里面 ...

  6. android 编译过程

    引用:http://www.cnblogs.com/devinzhang/archive/2011/12/20/2294686.html http://blog.sina.com.cn/s/blog_ ...

  7. java第六次作业(老师讲过后)

    import java.util.*; public class Draw { private ArrayList list; public Draw() { list= new ArrayList( ...

  8. python学习笔记之迭代器和函数(第三天)

    一.collection系列: 1.counter计数器 如果counter(dict)是对字典的一个补充,如果counter(list)则是对列表的补充,初步测试对字典的值进行排序. ####### ...

  9. python基础入门一(语法基础)

    作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...

  10. 在.NET中使用JQuery 选择器精确提取网页内容

    1. 前言 相信很多人做开发时都有过这样的需求:从网页中准确提取所需的内容.思前想后,方法无非是以下几种:(本人经验尚浅,有更好的方法还请大家指点) 1. 使用正则表达式匹配所需元素.(缺点:同类型的 ...