服务的基本用法-1

服务,作为Android四大组件之一(相信大家都知道Android的四大组件是什么了),有非常多重要的知识点,当然作为Android开发的新人,我们首先要从服务最基本的用法开始学习。还是闲言少叙,我们直奔主题,开始学习。
要学习服务,首先我们要来定义一个服务。打开Android Studio,新建一个ServiceTest1项目,然后在com.example.servicetest1上右键,然后New--Service--Service,会弹出一个窗口,MyService是这个服务的名称,其他的选项我们默认选中就可以了,点击Finish完成。这样我们就创建好了一个服务。下面是MyService这个服务中的代码:

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
 
 
可以看到,MyService是继承自Service类,说明这是一个服务。接下来,我们要在这个服务里面做一些事情了。也就是具体的逻辑
 
 
 
 
可以看到,我们在MyService服务里面重写了图中红框里面的内容。其中,onCreate()方法是在服务“第一次”创建的时候调用,onStartCommand()方法是在每次启动服务的时候调用,而onDestroy()方法顾名思义,就是在服务销毁的时候调用。通常情况下,可以将逻辑写在onStartCommand()方法中。 另外不要忘记,一定要在AndroidManifest.xml中注册服务。当然了,这方面Android Studio已经帮助我们自动创建号了。 这样,我们就已经将一个服务完全定义好了。
 
 
定义好了服务之后,接下来,我们来看看如何启动和停止服务。这里主要还是借助Intent来实现。
首先我们来编辑一下activity_main.xml中的代码:
 
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/start_service"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Start Service"
        android:textAllCaps="false" />

    <Button
        android:id="@+id/stop_service"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Stop Service"
        android:textAllCaps="false" />

</LinearLayout>
 
 
很简单的布局文件,就是在页面添加了两个点击按钮,分别用于启动服务和停止服务。然后再来编辑MainActivity中的代码逻辑,如下所示:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button startService = (Button) findViewById(R.id.start_service);
        Button stopService = (Button) findViewById(R.id.stop_service);
        startService.setOnClickListener(this);
        stopService.setOnClickListener(this);
    }

    @Override
    public void onClick(View v){
        switch (v.getId()){
            case R.id.start_service:
                Intent startIntent = new Intent(this, MyService.class);
                startService(startIntent); //启动服务
                break;
            case R.id.stop_service:
                Intent stopIntent = new Intent(this, MyService.class);
                stopService(stopIntent); //停止服务
                break;
            default:
                break;
        }
    }
}
首先,我们在onCreate()方法里面,分别获取到了两个按钮的实例,然后给他们注册了点击事件。接着在onClick()方法中,在Start Service的点击事件里,先构建了一个Intent对象,然limian j后通过startService()来启动MyService这个服务。同样,停止服务也是相同的道理。那么我们如何确定服务已经启动或者已经停止了呢。很简单,我们在MyService的几个方法里面加上监控日志就可以了。如下所示:
 
 
@Override
public void onCreate(){
    super.onCreate();
    Log.d("MyService", "onCreate executed");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId){
    Log.d("MyService", "onStartCommand executed");
    return super.onStartCommand(intent,flags,startId);
}

@Override
public void onDestroy(){
    super.onDestroy();
    Log.d("MyService", "onDestroy executed");
}
 
 
可以看到,在MyService服务中,我把每一个方法里面都加上了日志,一旦该方法执行,日志就会打印出来,我们就可以知道,服务有没有启动,有没有停止了。接下来,运行程序,主界面如图所示:
 
 
 
 
点击一下Start Service按钮,观察logcat中打印的日志,如下图所示:
 
 
 
 
 
 
可以看到,MyService服务中onCreate()和onStartCommand()方法都执行了。并且我们可以在手机开发者选项的正在运行的服务里面找到,如下图:
 
 
 
 
不知道大家有没有疑问,那就是onCreate()方法和onStartCommand()方法到底有什么区别,因为刚刚点击启动服务按钮,两个方法都执行了。其实,onCreate()方法是只有服务在第一次启动的时候才会执行,之后在点击启动服务,就会只执行onStartCommand()方法了。我们可以再次点击一下启动服务的按钮,看一下logcat日志的现实,如下图:
 
 
 
 
这样,我们的疑问就彻底解决了。到这里,关于服务的启动,停止以及服务里面所重写的方法之间的区别我们就都掌握了。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值