`
pengfeifei26
  • 浏览: 245569 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

了解Service的生命周期,以及在startService和bindService时,Service如何响应

 
阅读更多
/** 
 * Android Service 示例 
 *  
 */  
public class MusicService extends Service {  
    private static final String TAG = "MusicService" ;  
    public static final String ACTION = "com.game.music.service.MusicService";  
      
    @Override  
    public IBinder onBind(Intent intent) {  
        Log.v(TAG, "MusicService onBind");  
        return null;  
    }  
      
    @Override  
    public void onCreate() {  
        Log.v(TAG, "MusicService onCreate");  
        super.onCreate();  
    }  
      
    @Override  
    public void onStart(Intent intent, int startId) {  
        Log.v(TAG, "MusicService onStart");  
        super.onStart(intent, startId);  
    }  
      
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        Log.v(TAG, "MusicService onStartCommand");  
        return super.onStartCommand(intent, flags, startId);  
    }  
}  



2、在AndroidManifest.xml文件中声明Service组件:
<service android:name="com.game.music.service.MusicService">  
            <intent-filter>  
                <action android:name="com.game.music.service.MusicService"/>  
            </intent-filter>              
</service>  


3、在需要service的地方通过Context.startService(Intent)方法启动service或者Context.bindService方法来绑定service。

具体测试代码如下:
public class ServiceDemoActivity extends Activity {  
    private static final String TAG = "ServiceDemoActivity";  
      
    Button bindBtn;  
    Button startBtn;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        bindBtn = (Button)findViewById(R.id.bindBtn);  
        startBtn = (Button)findViewById(R.id.startBtn);  
          
        bindBtn.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                bindService(new Intent(MusicService.ACTION), conn, BIND_AUTO_CREATE);  
            }  
        });  
          
        startBtn.setOnClickListener(new OnClickListener() {  
            public void onClick(View v) {  
                startService(new Intent(MusicService.ACTION));  
            }  
        });  
    }  
      
    ServiceConnection conn = new ServiceConnection() {  
        public void onServiceConnected(ComponentName name, IBinder service) {  
            Log.v(TAG, "onServiceConnected");  
        }  
        public void onServiceDisconnected(ComponentName name) {  
            Log.v(TAG, "onServiceDisconnected");  
        }  
    };  
    @Override  
    protected void onDestroy() {  
        Log.v(TAG, "onDestroy unbindService");  
        unbindService(conn);  
        super.onDestroy();  
    };  
}  


4、日志输出:

面的截图是点击绑定服务时输出的。可以看出,只调用了onCreate方法和onBind方法,当重复点击绑定服务时,没有再输出任何日志,并且不报错。onCreate方法是在第一次创建Service时调用的,而且只调用一次。另外,在绑定服务时,给定了参数BIND_AUTO_CREATE,即当服务不存在时,自动创建,如果服务已经启动了或者创建了,那么只会掉调用onBind方法。

上面的截图是在多次点击启动服务时输出的。可以看出,在第一次点击时,因为Service还未创建,所以调用了onCreate方法,紧接着调用了onStartCommand和onStart方法。当再次点击启动服务时,仍然调用了onStartCommand和onStart方法,所以,在Service中做任务处理时需要注意这点,因为一个Service可以被重复启动。

这里说一下,平常使用多的是startService方法,可以把一些耗时的任务放到后台去处理,当处理完成后,可以通过广播来通知前台。
分享到:
评论

相关推荐

    2011.09.01(3)——— android service startService bindService

    本篇文章将详细讲解 `startService` 和 `bindService` 这两种启动 `Service` 的方式,以及它们之间的区别和应用场景。 `startService` 是 Android 中启动 `Service` 的常见方式之一。当你调用 `startService()` ...

    Activity和Service生命周期及使用AIDL通信实例备份

    本篇将深入探讨Activity和Service的生命周期以及如何利用Android Interface Definition Language (AIDL)进行进程间通信。 Activity是Android应用程序的用户界面,它负责与用户交互。Activity的生命周期分为几个关键...

    StartService和BindService实现播放音乐的样例

    本示例将深入探讨如何使用`StartService`和`BindService`两种方式来实现音乐播放功能。 ### 1. StartService `StartService`用于启动一个服务,当服务被启动后,它会在后台持续运行,直到服务自行停止或系统因资源...

    Android Service生命周期及用法!

    `onDestroy()`则在Service被停止时调用,标志着Service生命周期的结束。值得注意的是,Service的生命周期管理需要谨慎处理,以避免内存泄漏和不必要的资源消耗。 Service与Activity之间的通信是通过Binder机制实现...

    android Service的生命周期

    总的来说,Android Service的生命周期管理是开发者必须掌握的关键技能,正确理解和使用Service生命周期能够确保应用的稳定性和效率,避免不必要的资源消耗。在开发过程中,我们还需要注意Service的权限管理,以及在...

    service的生命周期以及启动方式

    当首次调用`startService()`时,Service进入创建状态,`onCreate()`方法被调用。接着,如果Service尚未运行,`onStartCommand()`会被调用,用于处理服务的启动请求。如果Service已经运行,`onStartCommand()`则会因...

    Android说明Service生命周期的代码例子

    Service生命周期的理解和正确管理对于优化应用程序性能至关重要。以下是一个关于Service生命周期的详细解析,结合代码示例来阐述如何在Android中操作Service。 1. **Service生命周期概述** Service的生命周期主要...

    Android 启动 Service(startservice和bindservice) 两种方式的区别

    Service生命周期中的`onCreate()`方法在首次启动时被调用,后续的`startService()`调用不会再次触发`onCreate()`,而是会调用`onStartCommand()`方法,用于传递Intent数据并执行相应的任务。这意味着,即使启动...

    BindService

    在TestBindService示例中,你应该可以看到如何创建一个简单的Service,定义它的生命周期方法,以及如何在客户端Activity中绑定和解绑这个Service。通过查看源代码,你可以更深入地理解`BindService`的工作原理和用法...

    android项目教程Service生命周期.pptx

    - 未绑定Activity的Service生命周期图显示了startService()启动的过程,而绑定Activity的Service生命周期图则展示了bindService()启动的过程,两者在生命周期上有显著差异。 理解并熟练掌握Service的生命周期及其...

    Android中service基本用法,生命周期1

    startService启动方式,只在activity中启动和销毁,和activity关系不大,即使antivity退出,服务任然运行,比如后台放音乐,对应生命周期: bindService启动方式,和activity绑定后,和activity共存亡,activity...

    Android中演示Service生命周期的代码清单.pdf

    总结来说,本代码清单详细展示了如何在Android应用中创建并管理Service的生命周期,包括启动、停止、绑定和解绑Service的过程。理解并熟练掌握Service的生命周期对于Android开发者来说至关重要,因为这有助于确保...

    Android中Service的生命周期解析.pdf

    这是Service生命周期中的最后一个回调,开发者应在此处释放所有资源。 3. 启动服务(Started Service) 当通过startService()启动Service时,Service会在后台无限运行,直到调用stopService()或stopSelf()才会停止...

    AndroidService生命周期及用法[收集].pdf

    使用`startService()`方法启动Service,这会导致Service生命周期中的`onStartCommand()`被调用。若要停止Service,可以调用`stopService()`。需要注意的是,即使调用了`stopService()`,Service可能并不会立即停止,...

    Service的使用方式02(bindService和unBindService)

    本篇文章将深入探讨如何使用`bindService`和`unbindService`方法来与服务进行交互,这是服务生命周期管理的重要部分。 一、Service的基本概念 Service是Android四大组件之一,它可以在后台运行,即使用户离开了应用...

    Android中Service生命周期演示案例的任务要求.pdf

    6. **Service生命周期**: Service的生命周期包括`onCreate()`, `onStartCommand()`, `onBind()`, `onUnbind()`, `onDestroy()`等关键方法。在创建Service时,会调用`onCreate()`,接着如果是通过`startService()`...

    BindService绑定Service播放音乐

    相比于使用`startService()`,`bindService()`提供了更紧密的耦合,使得调用者可以直接调用Service中的方法,而不仅仅是发送意图。绑定服务通常用于需要频繁交互或者需要对服务有精确控制的场景,比如播放音乐时调整...

    Service 启动与停止

    三、Service生命周期 1. onCreate(): 当Service首次被创建时调用,可以在这里初始化Service所需资源。 2. onStartCommand(): 对于startService()启动的Service,每次调用startService()都会触发此方法,返回值决定了...

    startservice

    本篇文章将深入探讨 `startService()` 方法及其相关的生命周期,帮助开发者更好地理解和使用这一核心功能。 `startService()` 是在Android中启动一个Service的方法,它的主要特点是:服务一旦启动,就会在后台持续...

Global site tag (gtag.js) - Google Analytics