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. SQL Server 常用日期查询语句

    --本月月初select  dateadd(mm,datediff(mm,0,getdate()),0) --本月月末select  DATEADD(DD,-1,DATEADD(MONTH,1+DAT ...

  2. 从PowerDesigner表字段的Name到EF实体类属性的Display Name(根据PowerDesigner生成EF实体类中文注释和验证元数据)

    第一步:将PowerDesigner表字段的中文Name填入Comment中:工具-Execute Commands-Edit/Run Script... '********************* ...

  3. imx6 关闭调试串口

    需要关闭imx6调试串口,用作普通的串口使用. 参考链接 http://blog.csdn.net/neiloid/article/details/7585876 http://www.cnblogs ...

  4. 去掉tableview顶部留白

    self.automaticallyAdjustsScrollViewInsets = NO;   //去掉tableVIew顶部留白

  5. 点餐系统sprint3总结

    转眼间,sprint3也结束了.意味着软件工程的课程结束了,我们的项目也完成了.在队友们的认真学习,专注打码,辛苦赶工后,我们的项目完成了.显然是仓促中完成的,没有完美的界面.没有无bug的项目,但是 ...

  6. laravel5.3----------调度任务以及Artisan

    1.在使用的过程中会遇到有些函数不能用需要在php配置文件里面打开: disable_functions = exec,passthru,popen,proc_open,shell_exec,syst ...

  7. Oracle 正则表达式函数-REGEXP_INSTR 使用例子

    原文在这 戳 REGEXP_INSTR 6个参数 第一个是输入的字符串 第二个是正则表达式 第三个是标识从第几个字符开始正则表达式匹配.(默认为1) 第四个是标识第几个匹配组.(默认为1) 第五个是指 ...

  8. debian bcm43* 无线网卡驱动

    deb http://httpredir.debian.org/debian/ jessie main contrib non-free # apt-get update# apt-get insta ...

  9. Ext.Net_1 配置ext.net所需的环境

    一.配置ext.net有两种方法,一是通过自动配置,即:工具--->Nuget包管理器--->管理解决方案的Nuget程序包--->搜索EXT.NET--->安装,安装完后,环 ...

  10. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...