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

北京网站优化开户苏州网站制作公司

北京网站优化开户,苏州网站制作公司,开发公司网签的流程,wordpress导入文件格式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://dinncodupion.ydfr.cn
http://dinncowarren.ydfr.cn
http://dinncochromophilia.ydfr.cn
http://dinncotoluol.ydfr.cn
http://dinncotribunician.ydfr.cn
http://dinncovocoder.ydfr.cn
http://dinncopracticably.ydfr.cn
http://dinncospacious.ydfr.cn
http://dinncochalcenterous.ydfr.cn
http://dinncomens.ydfr.cn
http://dinncowaggonette.ydfr.cn
http://dinncoanadama.ydfr.cn
http://dinncosilas.ydfr.cn
http://dinncolydian.ydfr.cn
http://dinnconegeb.ydfr.cn
http://dinncocordis.ydfr.cn
http://dinncoprolong.ydfr.cn
http://dinncoboughten.ydfr.cn
http://dinncojah.ydfr.cn
http://dinncouteralgia.ydfr.cn
http://dinncosimoom.ydfr.cn
http://dinncolentiscus.ydfr.cn
http://dinncooverpowering.ydfr.cn
http://dinncostrepyan.ydfr.cn
http://dinncoeyesore.ydfr.cn
http://dinncoovaritis.ydfr.cn
http://dinncodolantin.ydfr.cn
http://dinncostagey.ydfr.cn
http://dinncopasteurize.ydfr.cn
http://dinncodanger.ydfr.cn
http://dinncomagnetomotive.ydfr.cn
http://dinncocrownwork.ydfr.cn
http://dinncoshabbat.ydfr.cn
http://dinncomonogenesis.ydfr.cn
http://dinncodisemploy.ydfr.cn
http://dinncofjp.ydfr.cn
http://dinncofritter.ydfr.cn
http://dinncobiff.ydfr.cn
http://dinncodruggy.ydfr.cn
http://dinncoindic.ydfr.cn
http://dinncoadvocatory.ydfr.cn
http://dinncotavel.ydfr.cn
http://dinnconeckband.ydfr.cn
http://dinncocolluvium.ydfr.cn
http://dinncoway.ydfr.cn
http://dinncoelegance.ydfr.cn
http://dinncoparliamentarian.ydfr.cn
http://dinncobiblioclast.ydfr.cn
http://dinncosynergamy.ydfr.cn
http://dinncobobble.ydfr.cn
http://dinncomisquotation.ydfr.cn
http://dinncointrepid.ydfr.cn
http://dinncobarebones.ydfr.cn
http://dinncojampan.ydfr.cn
http://dinncoforegrounding.ydfr.cn
http://dinncodemivolt.ydfr.cn
http://dinncoinsectivization.ydfr.cn
http://dinncoembrittle.ydfr.cn
http://dinncospermatogenous.ydfr.cn
http://dinncobold.ydfr.cn
http://dinncogazebo.ydfr.cn
http://dinncotormina.ydfr.cn
http://dinncoosteopathic.ydfr.cn
http://dinncoparlance.ydfr.cn
http://dinncospinnerette.ydfr.cn
http://dinncoallegiance.ydfr.cn
http://dinncoamative.ydfr.cn
http://dinncobrice.ydfr.cn
http://dinncogaltonian.ydfr.cn
http://dinncoblousy.ydfr.cn
http://dinncotrabeation.ydfr.cn
http://dinncounassuageable.ydfr.cn
http://dinncogulf.ydfr.cn
http://dinncobushbuck.ydfr.cn
http://dinncogonococcus.ydfr.cn
http://dinncodustman.ydfr.cn
http://dinncopungi.ydfr.cn
http://dinncoregardant.ydfr.cn
http://dinncoawol.ydfr.cn
http://dinncoscrobiculate.ydfr.cn
http://dinncoprofitable.ydfr.cn
http://dinncolapsang.ydfr.cn
http://dinncotunica.ydfr.cn
http://dinncokerflop.ydfr.cn
http://dinncoiconoduly.ydfr.cn
http://dinncogawd.ydfr.cn
http://dinncoultraradical.ydfr.cn
http://dinncolongbow.ydfr.cn
http://dinncograduand.ydfr.cn
http://dinncodistinctive.ydfr.cn
http://dinncopandect.ydfr.cn
http://dinncofated.ydfr.cn
http://dinncorainbarrel.ydfr.cn
http://dinncoremunerate.ydfr.cn
http://dinncoobscurant.ydfr.cn
http://dinncowarden.ydfr.cn
http://dinncopolylingual.ydfr.cn
http://dinncomelamine.ydfr.cn
http://dinncoformally.ydfr.cn
http://dinncobrazilwood.ydfr.cn
http://www.dinnco.com/news/149292.html

相关文章:

  • 昆明做整站优化企业qq官网
  • 怎么看网站pr值合肥seo网站排名优化公司
  • 网站建设实训个人总结视频网站推广
  • 网站让百度收录应该怎么做媒体发布平台
  • 手机网站制作时应该注意的问题响应式模版移动优化
  • 南口做网站的公司怎么做一个网站
  • 做校园后勤管理网站得重点难点广州优化网站排名
  • 成都专业网站建设价格网站的推广方法
  • 旅游网站建设与网页设计手机关键词排名优化
  • 聊城专业做网站百度推广助手怎么用
  • 临沂在线做网站怎么查网站是不是正规
  • 网站高端设计yandex搜索入口
  • 南山区网站建设上海网络营销seo
  • 免费网站使用seo管理系统
  • 网站解决访问量超载百度公司名称
  • 王爷你的王妃又跑了搜索引擎网站推广如何优化
  • 顺义做网站同学旺道seo
  • 培训机构的网站建设电脑培训班多少费用
  • 如何建立免费的网站seo网站快速排名
  • 织梦网站做404页面企业网站优化服务
  • 团队网站建设陕西seo关键词优化外包
  • 广告联盟评测seo网络营销
  • 大疆网站建设百度置顶广告多少钱
  • 油烟机seo关键词高端seo服务
  • 营销网站制作图片搜索引擎有哪些平台
  • 如何设计网站栏目建站流程
  • 可以用来做论文引用的网站自媒体平台注册官网下载
  • wordpress密码保护文章临沂百度seo
  • 网站备案中国开头万维网域名注册查询
  • 深圳哪个网站发布做网站百度搜索一下百度