Android 系列 4.6在显示其他应用程序的同时运行后台服务
来源:互联网 发布:韶关市新丰县网络问政 编辑:程序博客网 时间:2024/05/16 08:50
4.6在显示其他应用程序的同时运行后台服务
问题
您希望您的应用程序的一部分继续在后台运行,而用户切换到与其他应用程序交互。
解
创建一个Service类来做后台工作;从您的主应用程序启动服务。可选地提供通知图标,以允许用户停止正在运行的服务或恢复主应用程序。
讨论
服务类(android.app.Service)作为与主应用程序相同的进程的一部分运行,但具有一个属性,即使用户切换到另一个应用程序或转到主屏幕并启动一个新的应用程序。
正如你现在所知道的,Activity类可以通过与其内容提供者匹配的意图启动,或者通过按类名称提及它们的意图启动。服务也是如此。这个菜谱着重于直接启动服务;配方4.1涵盖了隐式启动服务。以下示例取自JPSTrack,Android的GPS跟踪程序。一旦您开始跟踪,您不希望跟踪停止,如果你接听电话或必须看地图(!),所以我们使它成为一个服务。如示例4-10所示,当您单击开始跟踪按钮时,服务由主活动启动,并由停止按钮停止。注意,这是非常普遍的,startService()和stopService()被内置到Activity类中。
实例4-10。 onCreate方法
TrackService类直接扩展了Service,所以它必须实现抽象的onBind()方法。这是在类直接启动时不使用的,所以它可以是一个存根方法。您通常会至少覆盖onStartCommand()和onUnbind()方法,以开始和结束某些活动。例4-11启动GPS服务向我们发送通知,我们保存到磁盘,我们希望它继续运行,因此这个Service类。
实例4-11。 TrackService(使用GPS的服务)类
您可能已经注意到onStartCommand()的不同返回值。如果您返回START_STICKY,Android会在服务终止后重新启动您的服务。如果您返回START_NOT_STICKY,该服务将不会自动重新启动。这些值在Service类的联机文档中有更详细的讨论(请参见http://developer.android.com/reference/android/app/Service.html)。请记住在AndroidManifest.xml的应用程序部分中声明Service子类:
<service android:enabled =“true”android:name =“。TrackService”>
问题
您希望您的应用程序的一部分继续在后台运行,而用户切换到与其他应用程序交互。
解
创建一个Service类来做后台工作;从您的主应用程序启动服务。可选地提供通知图标,以允许用户停止正在运行的服务或恢复主应用程序。
讨论
服务类(android.app.Service)作为与主应用程序相同的进程的一部分运行,但具有一个属性,即使用户切换到另一个应用程序或转到主屏幕并启动一个新的应用程序。
正如你现在所知道的,Activity类可以通过与其内容提供者匹配的意图启动,或者通过按类名称提及它们的意图启动。服务也是如此。这个菜谱着重于直接启动服务;配方4.1涵盖了隐式启动服务。以下示例取自JPSTrack,Android的GPS跟踪程序。一旦您开始跟踪,您不希望跟踪停止,如果你接听电话或必须看地图(!),所以我们使它成为一个服务。如示例4-10所示,当您单击开始跟踪按钮时,服务由主活动启动,并由停止按钮停止。注意,这是非常普遍的,startService()和stopService()被内置到Activity类中。
实例4-10。 onCreate方法
@Overridepublic void onCreate(Bundle savedInstanceState) {...Intent theIntent = new Intent(this, TrackService.class);Button startButton = (Button) findViewById(R.id.startButton);startButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startService(theIntent);Toast.makeText(Main.this, "Starting", Toast.LENGTH_LONG).show();}});Button stopButton = (Button) findViewById(R.id.stopButton);stopButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {stopService(theIntent);Toast.makeText(Main.this, "Stopped", Toast.LENGTH_LONG).show();}});...}
TrackService类直接扩展了Service,所以它必须实现抽象的onBind()方法。这是在类直接启动时不使用的,所以它可以是一个存根方法。您通常会至少覆盖onStartCommand()和onUnbind()方法,以开始和结束某些活动。例4-11启动GPS服务向我们发送通知,我们保存到磁盘,我们希望它继续运行,因此这个Service类。
实例4-11。 TrackService(使用GPS的服务)类
public class TrackService extends Service {private LocationManager mgr;private String preferredProvider;@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {initGPS(); // sets up the LocationManager mgrif (preferredProvider != null) {mgr.requestLocationUpdates(preferredProvider, MIN_SECONDS * 1000,MIN_METRES, this);return START_STICKY;}return START_NOT_STICKY;}@Overridepublic boolean onUnbind(Intent intent) {mgr.removeUpdates(this);return super.onUnbind(intent);}
您可能已经注意到onStartCommand()的不同返回值。如果您返回START_STICKY,Android会在服务终止后重新启动您的服务。如果您返回START_NOT_STICKY,该服务将不会自动重新启动。这些值在Service类的联机文档中有更详细的讨论(请参见http://developer.android.com/reference/android/app/Service.html)。请记住在AndroidManifest.xml的应用程序部分中声明Service子类:
<service android:enabled =“true”android:name =“。TrackService”>
0 0
- Android 系列 4.6在显示其他应用程序的同时运行后台服务
- android 实现应用程序后台运行的说明
- 同时在手机和平板下兼容运行Android应用程序
- 同时运行多个后台服务程序
- android 创建后台运行的服务程序
- eclipese 编写android应用程序 在模拟器上 显示停止运行
- android中获取手机后台运行服务的方法
- android运行后台服务的生命周期与使用技巧
- C#禁止应用程序同时运行的方法
- C#禁止应用程序同时运行的方法
- android 后台运行服务之创建后台服务篇
- Android 实现应用程序最小化到后台运行
- 在一个后台服务中运行
- IOS openURL 运行其他的应用程序
- iOS-openURL 运行其他的应用程序
- IOS openURL 运行其他的应用程序
- 避免在一台机器上同时运行同一应用程序的多个实例。
- winXP(同时也适用于win7)系统使用打印机时“后台处理程序服务没有运行”时的解决办法
- windows 服务器80端口被占用
- JavaScript学习(三)之引用类型
- 十分钟搞清字符集和字符编码
- 转载!!!relloc()函数解析
- Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡
- Android 系列 4.6在显示其他应用程序的同时运行后台服务
- MySQL group_concat设置group_concat_max_len
- 在构造函数/析构函数中调用虚函数
- 搭建自己的腾讯云服务器
- .net 中句柄的理解
- 入门训练 圆的面积
- c# 变量空值&设置空值默认值
- go服务器与mfc做客户端的简单群聊Demo
- theano,cuda,cudnn,cnmen