当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

Android 服务(Service)

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-23 11:12:22

由 yiyohunter 创建,小路依依 最后一次修改 2016-11-12 Android 服务(Service)服务是一个后台运行的组件,执行长时间运行且不需要用户交互的任务。即使应用被销毁也依然可以工作。服务基本上包含两种状态 -状态描述StartedAndroid的应用程序组件,如活动,通过startService()启动了服务,则服务是Started状态。一旦启动,服务可以在后台无限期运行,及时启动它的组件已经被销毁。Bound当Android的应用程序组件通过bindService()绑定了服务,则服务是Bound状态。Bound状态的服务提供了一个客户服务器接口来允许组件与服务进行交互,如发送请求,获取结果,甚至通过IPC来进行跨进程通信。服务拥有生命周期方法,可以实现监控服务状态的变化,可以在合适的阶段执行工作。下面的左图展示了当服务通过startService()被创建时的声明周期,右图则显示了当服务通过bindService()被创建时的生命周期: 要创建服务,你需要创建一个继承自Service基类或者它的已知子类的Java类。Service基类定义了不同的回调方法和多数重要方法。你不需要实现所有的回调方法。虽然如此,理解所有的方法还是非常重要的。实现这些回调能确保你的应用以用户期望的方式实现。回调描述onStartCommand()其他组件(如活动)通过调用startService()来请求启动服务时,系统调用该方法。如果你实现该方法,你有责任在工作完成时通过stopSelf()或者stopService()方法来停止服务。onBind当其他组件想要通过bindService()来绑定服务时,系统调用该方法。如果你实现该方法,你需要返回IBinder对象来提供一个接口,以便客户来与服务通信。你必须实现该方法,如果你不允许绑定,则直接返回null。onUnbind()当客户中断所有服务发布的特殊接口时,系统调用该方法。onRebind()当新的客户端与服务连接,且此前它已经通过onUnbind(Intent)通知断开连接时,系统调用该方法。onCreate()当服务通过onStartCommand()和onBind()被第一次创建的时候,系统调用该方法。该调用要求执行一次性安装。onDestroy()当服务不再有用或者被销毁时,系统调用该方法。你的服务需要实现该方法来清理任何资源,如线程,已注册的监听器,接收器等。下面的主服务演示了每个方法的生命周期 -package cn.uprogrammer.androidservices;import android.app.Service;import android.os.IBinder;import android.content.Intent;import android.os.Bundle;public class HelloService extends Service { /** 标识服务如果被杀死之后的行为 */ int mStartMode; /** 绑定的客户端接口 */ IBinder mBinder; /** 标识是否可以使用onRebind */ boolean mAllowRebind; /** 当服务被创建时调用. */ @Override public void onCreate() { } /** 调用startService()启动服务时回调 */ @Override public int onStartCommand(Intent intent, int flags, int startId) { return mStartMode; } /** 通过bindService()绑定到服务的客户端 */ @Override public IBinder onBind(Intent intent) { return mBinder; } /** 通过unbindService()解除所有客户端绑定时调用 */ @Override public boolean onUnbind(Intent intent) { return mAllowRebind; } /** 通过bindService()将客户端绑定到服务时调用*/ @Override public void onRebind(Intent intent) { } /** 服务不再有用且将要被销毁时调用 */ @Override public void onDestroy() { }}实例这个例子将通过简单地步骤为你展示如何创建自己的Android服务。按照下面的步骤来修改之前在Hello World实例章节中创建的Android应用程序:步骤描述1使用Android Studio IDE来创建Android应用程序并在cn.uprogrammer.androidservices包下命名为androidservices。类似Hello World实例章节。2修改主活动文件MainActivity.java来添加startService()和stopService()方法。3在包cn.uprogrammer.androidservices下创建新的Java文件MyService.java。这个文件将实现Android服务相关的方法。4在AndroidManifest.xml文件中使用<service.../>标签来定义服务。应用程序可以有一个或多个服务,没有任何限制。5修改res/layout/activity_main.xml文件中的默认布局,在线性布局中包含两个按钮。6不要对res/values/strings.xml文件中的任何常量进行修改。Android Studio会注意字符串值。7启动Android模拟器来运行应用程序,并验证应用程序所做改变的结果。下面是主活动文件src/cn.uprogrammer.androidservices/MainActivity.java文件所修改的内容。这个文件包含所有基本的生命周期方法。我们添加了startService()和stopService()方法来启动和停止服务。package cn.uprogrammer.androidservices;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.content.Intent;import android.view.View;public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } // Method to start the service public void startService(View view) { startService(new Intent(getBaseContext(), MyService.class)); } // Method to stop the service public void stopService(View view) { stopService(new Intent(getBaseContext(), MyService.class)); }}以下是src/cn.uprogrammer.androidservices/MyService.java的内容。这个文件可以基于需求实现一个或多个服务关联的方法。对于新人,我们只实现onStartCommand()和onDestroy() -package cn.uprogrammer.androidservices;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.widget.Toast;public class MyService extends Service { @Ove

[1] [2]  下一页


Android 服务(Service)