服务的基本用法-1

来源:互联网 发布:淘宝倒卖赚差价的生意 编辑:程序博客网 时间:2024/05/28 11:30
服务,作为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的几个方法里面加上监控日志就可以了。如下所示:
@Overridepublic void onCreate(){    super.onCreate();    Log.d("MyService", "onCreate executed");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId){    Log.d("MyService", "onStartCommand executed");    return super.onStartCommand(intent,flags,startId);}@Overridepublic void onDestroy(){    super.onDestroy();    Log.d("MyService", "onDestroy executed");}
可以看到,在MyService服务中,我把每一个方法里面都加上了日志,一旦该方法执行,日志就会打印出来,我们就可以知道,服务有没有启动,有没有停止了。接下来,运行程序,主界面如图所示:
点击一下Start Service按钮,观察logcat中打印的日志,如下图所示:
可以看到,MyService服务中onCreate()和onStartCommand()方法都执行了。并且我们可以在手机开发者选项的正在运行的服务里面找到,如下图:
不知道大家有没有疑问,那就是onCreate()方法和onStartCommand()方法到底有什么区别,因为刚刚点击启动服务按钮,两个方法都执行了。其实,onCreate()方法是只有服务在第一次启动的时候才会执行,之后在点击启动服务,就会只执行onStartCommand()方法了。我们可以再次点击一下启动服务的按钮,看一下logcat日志的现实,如下图:
这样,我们的疑问就彻底解决了。到这里,关于服务的启动,停止以及服务里面所重写的方法之间的区别我们就都掌握了。
0 0
原创粉丝点击