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. angularJs之定时器

    $timeout 服务 AngularJS $timeout 服务对应了 JS window.setTimeout 函数. 实例 两秒后显示信息: var app = angular.module(' ...

  2. 使用jsonp跨域请求后可以获得数据,但是进入error方法,返回parseerror

    $.ajax({ url:url, dataType:'jsonp', jsonp: 'callback',//回调函数名字 jsonpCallback: 'success_jsonpCallback ...

  3. 控制反转IOC的依赖注入方式

    引言: 项目中遇到关于IOC的一些内容,因为和正常的逻辑代码比较起来,IOC有点反常.因此本文记录IOC的一些基础知识,并附有相应的简单实例,而在实际项目中再复杂的应用也只是在基本应用的基础上扩展而来 ...

  4. laravel5.1学习(2)-- artisan tinker命令

    例如:为users表创建20条测试输入 G:\wamp\www\hcmf>php artisan tinker >>> namespace App; => null &g ...

  5. Navicat Premium相关注册码

    --Navicat for SQL Server V10.0.10NAVD-3CG2-6KRN-IEPMNAVL-NIGY-6MYY-XWQENAVI-C3UU-AAGI-57FW --Navicat ...

  6. C语言堆和栈

    堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap ...

  7. 使用git 更新线上代码

    先本地代码合并://1合并分支git branch//2查看taggit tag //3添加tagcloud_crm]$ git tag -a v1.0.2 -m "0902"// ...

  8. Android--RecyclerView的封装使用

    1,用了很长一段时间的RecyclerView,在项目中用的频率也越来越频繁(因为踩得坑也越来越多了),或过头来看,感觉一直在写RecyclerView.Adapter中的三个方法和一个内部类,感觉很 ...

  9. 将HTML5封装成android应用APK文件的几种方法(转载)

    越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...

  10. [MKRCVCD]Burning SDK report AddFile error

    在使用Pipe通信的使用,我使用GetProcessExitCode这个函数来获取返回值.而ExitCode的定义为DWORD DWORD的原型为unsigned long,在32位程序中,DWORD ...