当前位置: 首页 > news >正文

买东西最便宜的网站龙海网站建设价格

买东西最便宜的网站,龙海网站建设价格,菜鸟教程网站是怎么做的,年度考核表个人总结网站建设Github:https://github.com/MADMAX110/Odometer 启动式服务对于后台操作很合适,不过需要一个更有交互性的服务。 接下来构建这样一个应用: 1、创建一个绑定式服务的基本版本,名为OdometerService 我们要为它增加一个方法getDistance()&#x…

Github:https://github.com/MADMAX110/Odometer
启动式服务对于后台操作很合适,不过需要一个更有交互性的服务。
接下来构建这样一个应用:
1、创建一个绑定式服务的基本版本,名为OdometerService
我们要为它增加一个方法getDistance(),这个方法会返回一个随机数
2、让活动MainActivity绑定到OdometerService,并调用它的getDistance方法。
将每秒调用一次这个方法,在MainActivity中用得到的结果更新一个文本视图。
3、更新OdometerService,改为使用Android的位置服务。
这个服务将得到用户当前位置的更新,并使用这些更新计算所走过的距离。

创建一个名为Odometer的Android新工程

在这里插入图片描述

创建一个新服务

要创建一个绑定式服务,需要扩展Service类。
如图所示,在com.hfad.odometer中创建一个服务。
不要选中Exported,因为只有当希望这个应用之外的服务能够访问这个服务时才需要将它设置为true。
确保选中Enabled,不选中的话活动将无法运行应用。
在这里插入图片描述

package com.hafd.odometer;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;public class OdometerService extends Service {@Overridepublic IBinder onBind(Intent intent) {}
}

上面的代码实现了一个方法onBind,当一个组件希望绑定到这个服务时,会调用这个方法。这个方法有一个参数Intent,并返回一个IBinder对象。
IBinder是一个接口,用来将你的服务绑定到活动,需要在服务代码中提供它的一个实现。

实现一个绑定器

定义绑定器:

    public class OdometerBinder extends Binder {OdometerService getOdometer() {return OdometerService.this;}}

更新OdometerService.java代码并增加一个getDistance方法

package com.hafd.odometer;import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import java.util.Random;public class OdometerService extends Service {private final IBinder binder = new OdometerBinder();private final Random random = new Random();//创建一个绑定式服务时,需要提供一个Binder实现public class OdometerBinder extends Binder {//活动将使用这个方法得到OdometerService的一个引用OdometerService getOdometer() {return OdometerService.this;}}@Overridepublic IBinder onBind(Intent intent) {return binder;}public double getDistance() {return random.nextDouble();}
}

更新MainActivity的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"android:padding="16dp"><TextViewandroid:id="@+id/distance"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="48sp"android:layout_gravity="center_horizontal"android:textAppearance="?android:attr/textAppearanceLarge" /></LinearLayout>

MainActivity需要做什么

1、创建一个ServiceConnection

ServiceConnection是一个接口,允许将活动绑定到一个服务。
它有两个方法需要你定义:
onServiceConnected():建立与服务的连接时会调用
onServiceDisconnected():断开服务连接时会调用
更新MainActivity.java

    package com.hafd.odometer;import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;public class MainActivity extends AppCompatActivity {private ServiceConnection connection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {}@Overridepublic void onServiceDisconnected(ComponentName componentName) {}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}
onServiceConnected方法

在活动和服务之间建立连接时会调用这个方法。
有两个参数:一个ComponentName对象和一个IBinder对象,ComponentName对象描述所要连接的服务,IBinder对象由服务定义。
我们使用onServiceConnected方法做两件事:
1、使用它的IBinder参数得到所连接服务的一个引用,在这里就是OdometerService的引用。为此可以将IBinder强制转换为一个OdometerService.OdometerBinder,并调用它的getOdometer方法。
2、记录活动绑定到这个服务。

    private OdometerService odometer;private boolean bound = false;private ServiceConnection connection = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {OdometerService.OdometerBinder odometerBinder = (OdometerService.OdometerBinder) iBinder;odometer = odometerBinder.getOdometer(); //使用IBinder得到服务的一个引用bound = true;}@Overridepublic void onServiceDisconnected(ComponentName componentName) {bound = false;}};
onServiceDisconnected方法

记录活动不再绑定到服务。

public void onServiceDisconnected(ComponentName componentName) {bound = false;}

2、将活动绑定到服务

使用bindService绑定服务

通常会在两个地方将活动绑定到服务:
活动变得可见时,在活动的onStart方法中,如果只需要在活动可见时与活动交互,在这个方法中绑定服务就很合适。
活动创建时,在活动的onCreate方法中,如果需要从服务接受更新,即使活动已经停止也要继续接受更新,就要在这个方法中绑定服务。
在这里我们只需要在MainActivity可见时显示从OdometerService得到的更新,所以要在活动的onStart方法中绑定服务。
要绑定这个服务首先要创建一个显式意图,指定想要绑定的服务。然后使用活动的bindService方法绑定服务,传入这个意图,服务定义的ServiceConnection对象以及描述希望如何绑定的一个标志。

    @Overrideprotected void onStart() {super.onStart();Intent intent = new Intent(this, OdometerService.class);bindService(intent, connection, Context.BIND_AUTO_CREATE);}

3、与服务交互

调用OdometerService的getDistance方法
一旦活动绑定到服务,我们要每秒调用一次OdometerService的getDistance方法,并将其值更新MainActivity的文本视图。
为MainActivity增加一个displayDistance方法:

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);displayDistance();}private void displayDistance() {final TextView distanceView = (TextView) findViewById(R.id.distance);final Handler handler = new Handler();handler.post(new Runnable() {@Overridepublic void run() {double distance = 0.0;//如果得到OdometerService的一个引用,而且绑定到这个服务,则调用getDistance。if (bound && odometer != null)distance = odometer.getDistance();String distanceStr = String.format(Locale.getDefault(), "%1$,.2f miles", distance);distanceView.setText(distanceStr);//每秒运行一次handler.postDelayed(this, 1000);}});}

4、完成时与服务接触绑定

使用unbindService与服务解除绑定

将活动与服务解除绑定时,通常会把相应的代码增加到活动的onStop或onDestroy方法中。使用哪一个方法取决于你的bindService代码放在哪里:
如果在活动的onStart方法中绑定服务,则在onStop方法中解除绑定。
如果在onCreate方法中绑定服务,则在onDestroy方法中解除绑定。
所以这里在onStop方法与服务解除绑定。这个方法有一个参数,即ServiceConnection对象。需要向MainActivity增加以下代码:

    protected void onStop() {super.onStop();if (bound) {unbindService(connection);bound = false;}}

试一试应用

运行这个应用时会在MainActivity显示一个随机数,这个数每秒改变一次。
在这里插入图片描述

安卓绑定式服务的生命周期

1、服务创建
2、onCreate(): 当服务第一次被创建时执行。这个方法可以在服务创建时进行一些初始化操作。
3、onBind(): 当其他组件通过调用bindService()方法与服务绑定时执行。在这个方法中,服务会返回一个IBinder接口实例,客户端可以通过这个接口与服务进行通信。
4、服务绑定
5、onUnbind(): 当其他组件通过调用unbindService()方法与服务解绑时执行。在这个方法中,服务可以执行一些清理操作,例如停止在后台运行的任务等。
6、onDestroy(): 当服务不再被使用或被销毁时执行。注意,如果服务同时被启动和绑定,那么即使所有的客户端都解绑了服务,服务也不会被销毁,除非服务用stopSelf()方法或其他组件调用stopService()方法来终止自己。
7、服务撤销

总的来说,绑定式服务的生命周期与启动式服务的生命周期略有不同,主要区别在于绑定式服务需要与其他组件进行绑定和解绑操作,并且服务的生命周期会受到这些操作的影响。

http://www.yayakq.cn/news/704027/

相关文章:

  • 知名网站用的技术百度竞价推广代运营话术
  • 友点企业网站管理系统忘记密码河源市连平县建设局网站
  • 原创 网站 源码好买卖做网站
  • 网站小游戏怎么做的电子商务是最差的专业吗
  • 上海网站建设设wordpress 二次开发视频教程下载
  • 社交网站开发意义视频互动网站建设
  • iis装网站建设工程八大员考试网站
  • 百度做一个网站多少钱手机网站判断跳转代码怎么写
  • 泰州市高港区建设局网站学校网站做网页飘窗怎么做
  • 杭州网站制作平台网站建设找哪一家好
  • 微网站栏目图标特价网站建设价格
  • 公司注册网上核名一直提交不成功兰州网络推广优化网
  • 青海专业网页设计免费建站网站视频建设
  • 网站建设不能在淘宝发布小程序制作平台排行榜前十名
  • 深圳网站建设哪些注册公司代理记账公司
  • 网站的优化排名怎么做关键字优化
  • 建设网站的时候如何查看网站架构
  • 企业网站建设能解决什么问题茂名网站设计
  • 网站建设服务器域名南阳做网站费用
  • 网站文章更新怎么做网站后台分模块
  • h5网站开发软件下载定制vx免费
  • 看乱码的网站十大办公室设计公司
  • 怎么做网站旅游宣传河南省建设协会网站
  • 电子工程网站大全东台建设企业网站
  • 自己建的网站能用吗手机网址2021年免费不封
  • 在天极网做网站有效果吗网站建设先进技术
  • 自媒体123网站珠海移动网站建设公司
  • 做论坛网站需要多大空间网站建设用什么服务器
  • 网站开发平台建设电子商务网站建设目标分析
  • 网站建设平台招商wd mycloud wordpress