首页 文章 精选 留言 我的

精选列表

搜索[实体项目],共10000篇文章
优秀的个人博客,低调大师

Android小项目之--服务【Service】

有段时间没有写博客了,最近一段时间跳到了深圳,新的公司新的环境要去适应,人挺累的,所以近段时间没有写博客。这几天QQ群上有位朋友在问要Service的例子,当时没有跟他应答,现在抽空把例子整理了一下,发表上博客园,希望他能看得到。 Service 简介 何谓“Service”?“Service” 意思即“服务”的意思, 像 Windows 上面的服务一样,有些服务是在后台上运行,干着静悄悄的勾当不让人知道 。与 Activity 不同,Service 是并不直接与用户交互的运行于后台的一类组件。 Google对Service的解释 一个服务不是一个单独的进程。服务对象本身并不意味着它是在自己的进程中运行,除非另有规定,否则它与运行程序是同在一个进程中。 一个服务不是一个单独的线程。它是一种手段,本身做着主线的工作 (以避免应用程序没有响应的错误)。 Service 与 Activity 的相同点与不同点 不同点:Activity是与用户交互的组件,即我们用眼睛可以看到的界面,而Service是在后台运行,执行隐藏的动作。 相同点:使用Activity 时我们需要在配置文件中声明<activity>标签,同样的使用Service 也需要在配置文件中声明<service>标签 使用Service 创建Service需要继承自 android.app.Service 的类,然后重新实现在Service各个状态要回调的方法,Service的回调方法有三个,分别是: onCreate() 创建 onStart() 开始 onDestry() 释放 注意:Service是不能自己启动的,只有通过 Context 对象 调用startService和bindService方法来启动。但两种方法的Service生命周期是不同的,下面我们通过一个小例子来区别各自的生命周期。 例子效果图如下: 代码如下: package com.terry; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class ServiceSample extends Service{ final StringTAG = " Service " ; @Override public IBinderonBind(Intentintent){ // TODOAuto-generatedmethodstub Log.i(TAG, " onBind " ); return null ; } @Override public boolean onUnbind(Intentintent){ // TODOAuto-generatedmethodstub Log.i(TAG, " onUnbind " ); return super .onUnbind(intent); } @Override public void onRebind(Intentintent){ // TODOAuto-generatedmethodstub super .onRebind(intent); Log.i(TAG, " onRebind " ); } @Override public void onCreate(){ // TODOAuto-generatedmethodstub super .onCreate(); Log.i(TAG, " onCreate " ); } @Override public void onDestroy(){ // TODOAuto-generatedmethodstub super .onDestroy(); Log.i(TAG, " onDestroy " ); } @Override public void onStart(Intentintent, int startId){ // TODOAuto-generatedmethodstub super .onStart(intent,startId); Log.i(TAG, " onStart " ); } } 当调用startService方法时: 1、若Servcie没有启动,则首先会调用该Service的onCreate方法,然后再调用onStart方法。 2、若Service己经启动则首先会直接调用onStart方法, 3、关闭时使用stopservice来关闭。 当调用bindService方法时: 1、若Service没有启动,则首先调用onCreate方法,来初始化启动Service,然后调用Service的onBind。 2、通过onUnbind和onDestry方法停止Service运行。 下面通过一组图来更详细的说明Service的生命周期 开始服务 停止服务 绑定服务 销毁服务 音乐服务DEMO 通过上面的小例子可能有些园友还是很模糊,下面通过一个播放音乐的小例子加深大家对Service 的理解,该例子通过播放一首mp3 ,当用户点击开始“按钮”,音乐开始播放,即时你退出程序音乐也会播放,点击“停止”按钮,停止播放音乐 。 该例子继承service 然后重写onStart播放音乐 重写onDestry停止音乐 ,代码如下: package com.terry; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; public class musicServer extends Service{ private MediaPlayerplayer; @Override public IBinderonBind(Intentintent){ // TODOAuto-generatedmethodstub return null ; } @Override public void onStart(Intentintent, int startId){ // TODOAuto-generatedmethodstub super .onStart(intent,startId); if (player == null ) { player = MediaPlayer.create( this ,R.raw.start); player.start(); } } @Override public void onDestroy(){ // TODOAuto-generatedmethodstub super .onDestroy(); player.stop(); } } 完成了service类,我们只要在对应的Activity的事件中调用服务即可实现,代码如下: package com.terry; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class musicActivity extends Activity{ private Intentintent = new Intent( " com.terry.Android.MUSIC " ); @Override protected void onCreate(BundlesavedInstanceState){ // TODOAuto-generatedmethodstub super .onCreate(savedInstanceState); setContentView(R.layout.music); findView(); viewHolder.myButton.setOnClickListener( new OnClickListener(){ @Override public void onClick(Viewv){ // TODOAuto-generatedmethodstub startService(intent); } }); viewHolder.myButton2.setOnClickListener( new OnClickListener(){ @Override public void onClick(Viewv){ // TODOAuto-generatedmethodstub stopService(intent); } }); } void findView(){ viewHolder.myButton = (Button)findViewById(R.id.play); viewHolder.myButton2 = (Button)findViewById(R.id.stop); } } 运行效果图: 差不多就到这里吧,有点晚了,把源码提供给大家: 本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/338863,如需转载请自行联系原作者

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册