第一行代码-9.3 服务的基本用法

1、定义一个服务
  首先创建,然后注册

// ServiceTest - Service.java
public class MyService extends Service{

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    // 服务创建的时候使用
    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    // 服务启动的时候调用
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    // 服务销毁的时候调用
    @Override
    public void onCreate() {
        super.onCreate();
    }
}
<!-- AndroidManifest.xml -->
<service android:name="com.example.servicetest.MyService"></service>

2、启动或停止服务

<!-- activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical">
    <Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/start_service_button"
        android:text="启动服务"/>
    <Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/stop_service_button"
        android:text="结束服务"/>
</LinearLayout>
@Override
public void onClick(View view) {
    switch (view.getId()) {
    case R.id.start_service_button:
        Intent startIntent = new Intent(MainActivity.this, MyService.class);
        startService(startIntent);
        break;
    case R.id.stop_service_button:
        Intent stopIntent = new Intent(MainActivity.this, MyService.class);
        stopService(stopIntent);
        break;
    default:
        break;
    }
}

这里写图片描述
  开启服务之后,可以找到正在运行的MyService服务:

2、服务和活动通信
  上一节我们学习了怎样开启和结束一个服务,但是服务开启之后做什么事情还控制不了,也就是说onStartCommand执行什么还不能控制。
  举个例子,现在我要下载一个音乐,于是我开启了下载音乐的服务,执行了onStartCommand()函数,但是接下来我还要暂停下载,或者是停止下载,如果只用上面的代码是做不到的。这里必须借助刚才没有实现的onBind函数。
  修改MyService中的代码,如下:

// MyService.java - 添加的代码
class DownloadBinder extends Binder {

        public void startDownload() {
            Log.d("MyService", "开始下载!");
        }

        public int getProgress() {
            Log.d("MyService", "获取进度!");
            return 0;
        }

    }

    private DownloadBinder mBinder = new DownloadBinder();

    @Override
    public IBinder onBind(Intent arg0) {
        return mBinder;
    }

  写好了onBind函数,然后看看怎么在MainActivity中绑定服务:

<Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="绑定服务"
        android:id="@+id/bind_service_button"/>
<Button android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="解绑服务"
        android:id="@+id/unbind_service_button"/>
// MainActivity.java - 增加的部分
private Button mBBindService;
    private Button mBUnbindService;

    private MyService.DownloadBinder downloadBinder;

    private ServiceConnection connection = new ServiceConnection() {

        @Override
        public void onServiceDisconnected(ComponentName arg0) {
        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            downloadBinder = (MyService.DownloadBinder) service;
            downloadBinder.startDownload();
            downloadBinder.getProgress();

        }
    };
@Override
    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.start_service_button:
            Intent startIntent = new Intent(MainActivity.this, MyService.class);
            startService(startIntent);
            break;
        case R.id.stop_service_button:
            Intent stopIntent = new Intent(MainActivity.this, MyService.class);
            stopService(stopIntent);
            break;
        case R.id.bind_service_button:
            Intent bindIntent = new Intent(MainActivity.this, MyService.class);
            bindService(bindIntent, connection, BIND_AUTO_CREATE); // 绑定服务
            break;
        case R.id.unbind_service_button:
            unbindService(connection); // 解绑服务
            break;
        default:
            break;
        }
    }

  BIND_AUTO_CREATE的意思是,如果执行bindService的时候服务还没有创建,那么会自动创建活动。
  执行效果:
这里写图片描述
  注意:如果已经解绑服务了,再次执行unbindService会崩溃,暂时不知道原因。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值