`

android基础(2)

 
阅读更多

/**以下内容主要来源于android-sdk-windows/docs**/ 

 

services 

  • Started Service
  • Bound Service
 线程模型
A service runs in the main thread of its hosting process—the service does not create its own thread and does not run in a separate process (unless you specify otherwise).
 
在manifest文件中声明services
<manifest ... >
  ...
  <application ... >
      <service android:name=".ExampleService" />
      ...
  </application>
</manifest>
 

Started Service 
可以从Service或者IntentService继承,IntentService从Service继承,内部使用了一个工作线程和队列串行处理请求,如果对并发请求要求不高的话,推荐使用IntentService 

启动一个服务,当调用startService时,系统会调用服务的onStartCommand
Intent intent = new Intent(this, HelloService.class);
startService(intent);

如果希望获取结果,可使用PendingIntent(for a broadcast)
 

继承IntentService实现服务:
public class HelloIntentService extends IntentService {

  /** 
   * required
   */
  public HelloIntentService() {
      super("HelloIntentService");
  }

  /**
   *当启动服务后,该方法在一个默认的工作线程中执行,当这个方法返回时,服务自动停止. 
   */
  @Override
  protected void onHandleIntent(Intent intent) {
      // Normally we would do some work here, like download a file.
      // For our sample, we just sleep for 5 seconds.
      long endTime = System.currentTimeMillis() + 5*1000;
      while (System.currentTimeMillis() < endTime) {
          synchronized (this) {
              try {
                  wait(endTime - System.currentTimeMillis());
              } catch (Exception e) {
              }
          }
      }
  }

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    //my
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
    //基类的一定要调用
    return super.onStartCommand(intent,flags,startId);
}

}
继承Service实现服务: 
public class HelloService extends Service {
  private Looper mServiceLooper;
  private ServiceHandler mServiceHandler;

  // Handler that receives messages from the thread
  private final class ServiceHandler extends Handler {
      public ServiceHandler(Looper looper) {
          super(looper);
      }
      @Override
      public void handleMessage(Message msg) {
          // Normally we would do some work here, like download a file.
          // For our sample, we just sleep for 5 seconds.
          long endTime = System.currentTimeMillis() + 5*1000;
          while (System.currentTimeMillis() < endTime) {
              synchronized (this) {
                  try {
                      wait(endTime - System.currentTimeMillis());
                  } catch (Exception e) {
                  }
              }
          }
          // Stop the service using the startId, so that we don't stop
          // the service in the middle of handling another job
          stopSelf(msg.arg1);
      }
  }

  @Override
  public void onCreate() {
    // 创建一个工作线程
    // Start up the thread running the service.  Note that we create a
    // separate thread because the service normally runs in the process's
    // main thread, which we don't want to block.  We also make it
    // background priority so CPU-intensive work will not disrupt our UI.
    HandlerThread thread = new HandlerThread("ServiceStartArguments",
            Process.THREAD_PRIORITY_BACKGROUND);
    thread.start();
    
    // Get the HandlerThread's Looper and use it for our Handler 
    mServiceLooper = thread.getLooper();
    mServiceHandler = new ServiceHandler(mServiceLooper);
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
      Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();

      // For each start request, send a message to start a job and deliver the
      // start ID so we know which request we're stopping when we finish the job
      Message msg = mServiceHandler.obtainMessage();
      msg.arg1 = startId;
      mServiceHandler.sendMessage(msg);
      
      // If we get killed, after returning from here, restart
      return START_STICKY;
  }

  @Override
  public IBinder onBind(Intent intent) {
      // We don't provide binding, so return null
      return null;
  }
  
  @Override
  public void onDestroy() {
    Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
  }
}
 注意onStartCommand的返回值,决定当服务被杀掉后,系统怎么处理请求

停止服务
stopSelf(int startId)  如果startId和最近一次onStartCommand(Intent, int, int startId)的startId相同则停止服务。

 

 

分享到:
评论

相关推荐

    android基础2.ppt

    android基础2.ppt

    Android基础教程PPT

    这篇“Android基础教程PPT”旨在引导初学者了解如何使用Eclipse环境进行Android应用开发。首先,我们从创建或导入Android工程开始。 要开启一个新的Android工程,你需要在Eclipse中选择[File]-&gt;[New]-&gt;[Project],...

    Android零基础教程视频链接

    android基础教程,里边包括新版Android开发教程&笔记1--基础入门,Android开发教程&笔记2--基础入门二,Android开发教程&笔记3--环境搭建与解析,Android开发教程&笔记4--Dalvik ADB Android开发教程+笔记5--模拟器...

    Android基础-02

    在Android基础的学习中,"Android基础-02"这一主题主要涵盖了Android开发的基本概念和核心组件,这些都是构建Android应用程序的基础。下面将详细讲解这些知识点。 首先,Android是一种基于Linux内核的操作系统,...

    Android基础教程4

    **Android基础教程4** 在Android开发的学习过程中,基础教程4主要涵盖了Android开发的多个关键方面,包括用户界面设计、文件存取、数据库编程、应用程序管理、权限控制以及资源管理等核心概念。以下是对这些主题的...

    Android 基础教程 第三版 PDF 含源码

    《Android基础教程 第三版》是一本针对初学者和进阶开发者的重要参考资料,全面覆盖了Android应用开发的基础知识。此版本的PDF版本以其高质量的文本和包含源码的特点,为学习者提供了便捷的学习途径。书中的内容围绕...

    Android基础与应用开发教程

    Android基础与应用开发教程 Android基础与应用开发教程

    Android高手进阶教程与Android基础教程

    Android读写XML(上)——package说明.doc Android读写XML(下)——创建XML文档.doc Android读写XML(中)——SAX.doc Android高手进阶教程之----Android Handler的使用!...Android基础教程之----五大布局对象.doc

    Android基础知识详解【PDF文档】

    在介绍Android的基础知识时,首先需要了解其系统架构。Android采用了分层的设计,从上到下依次分为应用程序层、应用程序框架层、Android运行时和库、Linux内核四个层次。各个层次承担着不同的功能,保证了整个系统的...

    Android基础教程(第3版·修订版)

    ### Android基础教程(第3版·修订版)关键知识点概览 #### 一、书籍概述与定位 《Android基础教程(第3版·修订版)》是一部专为Android开发新手及中级开发者准备的基础教程。本书延续了Pragmatic系列图书的一贯风格...

    20151228-Android基础视频day07-day11源码

    这些资料主要涵盖的是Android开发的基础教程,源自2015年12月28日传智播客官网上金老师的课程。在这个系列中,学员可以通过day07到day11的源码学习Android应用程序开发的基本概念和技术。让我们逐一探讨这些知识点。...

    Android基础教程+源码

    **Android基础教程** Android是一种基于Linux内核的开源操作系统,主要应用于移动设备,如智能手机和平板电脑。这个基础教程旨在帮助初学者理解Android开发的基本概念和技术。教程可能涵盖了以下几个核心主题: 1....

    Android基础教程 第3版 修订版

    《Android基础教程 第3版 修订版》是学习Android开发的重要参考资料,针对初学者和有一定经验的开发者都具有很高的参考价值。本教程深入浅出地介绍了Android开发的基础知识,包括环境搭建、应用结构、UI设计、数据...

    android基础控件使用

    以下是一些主要的Android基础控件及其使用方法的详细说明: 1. **按钮(Button)** - `Button`控件用于实现点击事件,用户可以触发某种操作。可以通过`setOnClickListener`设置监听器,如: ```java Button button...

    Android移动开发基础案例教程(第2版)_PPT.zip

    《Android移动开发基础案例教程(第2版)》是一份专为初学者设计的教学资料,旨在帮助学习者掌握Android应用开发的基本技能。这份PPT涵盖了Android开发的核心概念、工具使用以及实战案例,对于想要踏入Android开发...

    Android基础开发与实践

    Android基础开发与实践

    Android基础教程

    Andro,Android基础教程Android基础教程Android基础教程id基础教程

    Android基础笔记

    Android 基础笔记 Android 基础笔记是 Android 开发的入门知识点总结,涵盖了 Android 开发的基础知识点,从 Android 发展史到自定义 ContentProvider 的实现。 一、Android 发展史 Android 的发展史可以追溯到 ...

    android基础_2.exe

    android基础_2.exe

    Android基础入门教程

    Android基础入门教程,网上教程,打包成chm,看得时候方便一些 教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了Android基础入门的大部分知识。

Global site tag (gtag.js) - Google Analytics