`
啸笑天
  • 浏览: 3462292 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

Activity、Bundle、请求码与结果码、Intent、广播、服务 (四)

阅读更多

服务(Service)

 

Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序。服务的开发比较简单,如下:

第一步:继承Service类

public class SMSService extends Service { }

第二步:在AndroidManifest.xml文件中的<application>节点里对服务进行配置:

<service android:name=".SMSService" />

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

 

如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,也可以通过Service自身调用stopSelf()或stopSelfResult()来关闭。服务结束时会调用onDestroy()方法。

如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法。

 

 

服务常用生命周期回调方法如下:

onCreate() 该方法在服务被创建时调用,该方法只会被调用一次,无论调用多少次startService()或bindService()方法,服务也只被创建一次。

onDestroy()该方法在服务被终止时调用。

· 与采用Context.startService()方法启动服务有关的生命周期方法

onStart() 只有采用Context.startService()方法启动服务时才会回调该方法。该方法在服务开始运行时被调用。多次调用startService()方法尽管不会多次创建服务,但onStart() 方法会被多次调用。

· 与采用Context.bindService()方法启动服务有关的生命周期方法

onBind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调用者与服务已经绑定,多次调用Context.bindService()方法并不会导致该方法被多次调用。

onUnbind()只有采用Context.bindService()方法启动服务时才会回调该方法。该方法在调用者与服务解除绑定时被调用。注意:BroadcastReceiver是不能绑定服务的。

 

 

采用Context.startService()方法启动服务的代码如下:

public class HelloActivity extends Activity {

    @Override

    public void onCreate(Bundle savedInstanceState) { 

        ......

        Button button =(Button) this.findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener(){

public void onClick(View v) {

Intent intent = new Intent(HelloActivity.this, SMSService.class);

startService(intent);

}});        

    }

}


采用Context.bindService()方法启动服务的代码如下:
public class HelloActivity extends Activity {
     ServiceConnection conn = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
}
public void onServiceDisconnected(ComponentName name) {
}
     };
    @Override public void onCreate(Bundle savedInstanceState) {  
        Button button =(Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent(HelloActivity.this, SMSService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
//unbindService(conn);//解除绑定
}});        
    }
}

服务的例子:
要实现电话窃 听,需要监听电话的状态,方法如下:
/* 取得电话服务 */
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener listener = new PhoneStateListener(){
@Override  public void onCallStateChanged(int state, String incomingNumber) {
     switch (state){
       case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */
        break;
       case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */
        break;
       case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */
        break;
       default:
break;
     }
super.onCallStateChanged(state, incomingNumber);
}        
};
//监听电话的状态
telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
在清单文件AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

  • ex1.rar (30.1 KB)
  • 描述: Service的生命期例子
  • 下载次数: 11
分享到:
评论

相关推荐

    Activity、Bundle、请求码与结果码、Intent、广播、服务 (三)

    在Android开发中,Activity、Bundle、请求码与结果码、Intent、广播以及服务是核心组件,它们构成了Android应用的基础架构。接下来,我们将深入探讨这些概念及其应用。 首先,Activity是Android应用程序的基本单元...

    Activity、Bundle、请求码与结果码、Intent、广播、服务 (二)

    在Android应用开发中,Activity、Bundle、请求码与结果码、Intent、广播和服务是核心组件,它们构成了Android应用运行的基本框架。这篇博文将深入探讨这些概念及其相互关系,旨在帮助开发者更好地理解和运用。 首先...

    Android+Intent机制实例详解.rar

    使用startActivity(Intent)或startActivityForResult(Intent, 请求码)方法启动Activity。startActivityForResult()用于需要接收返回结果的情况。 五、启动Service 使用startService(Intent)或bindService(Intent, ...

    android intent 代码

    显式Intent用于指定要启动的确切组件(Activity或Service),而隐式Intent则是向系统广播一个行动请求,任何符合Intent过滤器的组件都可以响应。 2. 创建Intent 创建Intent非常简单,你可以使用`new Intent()`构造...

    intent的深入分析

    通过Intent,我们可以启动活动(Activity)、服务(Service)或者广播接收器(BroadcastReceiver),传递数据和指令。本篇文章将深入探讨Intent的属性和使用时的注意事项。 一、Intent的基本类型 Intent分为显式...

    036_android_ActivityForResult

    请求码用于确认返回的结果来自哪个`Activity`,结果码表示`Activity`的执行状态(如是否成功),数据则是`Activity`返回的数据,通常是一个`Intent`,可能包含额外的信息。 四、请求码和结果码 请求码是你自定义的...

    Activity之间的调用

    这些模式影响着新Activity的创建方式以及现有Activity如何处理新的Intent请求。 1. standard(默认):每次启动Intent都会创建一个新的Activity实例,即使栈中已有该Activity。 2. singleTop:如果目标Activity已经...

    安卓Android源码——Intent1.rar

    Intent 可用于启动活动(Activity)、服务(Service),传递数据,甚至启动广播接收器(Broadcast Receiver)。本压缩包文件“安卓Android源码——Intent1.rar”很可能包含了有关Intent的源代码分析和示例,帮助...

    Android 获取来电号码和去电号码

    在回调方法`onRequestPermissionsResult()`中处理权限请求的结果。 总的来说,获取Android来电和去电号码涉及了权限管理、广播接收器以及运行时权限等核心知识点。通过这些技术,开发者可以实现电话状态监控,进而...

    Android应用开发-系统Activity的调用.pptx

    Intent包含了具体的操作请求信息,可以启动Activity、Service或发送广播。启动Activity有两种方式:直接使用`startActivity(Intent intent)`启动新的Activity,或者在现有Activity中使用`startActivityForResult...

    Android使用Intent实现Camera功能

    在Android应用开发中,Intent是连接各个组件的重要桥梁,它用于启动活动(Activity)、服务(Service)或广播接收器(Broadcast Receiver)。当我们想要调用系统相机功能时,Intent扮演了关键角色。本教程将深入讲解...

    android 接收屏幕广播例子

    在Android开发中,广播接收器(BroadcastReceiver)是一种重要的组件,它允许应用程序监听并响应系统或自定义事件。本文将详细讲解如何在Android中创建一个接收屏幕状态改变广播的示例。 首先,我们需要理解Android...

    android传值总结

    除了基本的数据传递,还有请求码(requestCode)和结果码(resultCode)的概念。当你使用`startActivityForResult(Intent intent, int requestCode)`启动Activity时,requestCode用于识别哪个按钮或者事件触发了这次...

    intent 调用相机

    在Android应用开发中,Intent是实现组件间通信的关键机制,它可以用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver)。当我们想要调用系统相机服务时,Intent的作用尤为显著。本教程将...

    android常用代码.pdf

    - 在父Activity中重写`onActivityResult(int requestCode, int resultCode, Intent data)`方法来接收子Activity返回的结果,通过`requestCode`匹配请求,`resultCode`判断返回状态,`data`获取返回的Intent数据。...

    xamarin学习笔记A03(安卓Activity)

    5. **Activity的启动模式**:Activity有四种启动模式:标准模式(Standard)、单实例模式(SingleTop)、单任务模式(SingleTask)和单栈顶模式(SingleInstance)。不同的启动模式会影响Activity如何被创建和管理,...

Global site tag (gtag.js) - Google Analytics