Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。
我们都知道Activity能呈现一个用户界面,于用户进行交互,而在很多时候,我们的程序不需要于用户进行交互的页面,只需要在后台一直运行着,做一些事物的处理,例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,Http的网络通信以及与服务器保持一个推送的连接,所有这些活动都是在后台进行。这个时候我们就可以用到Service。接下来我们就来试试如何使用Service
先创建一个项目:
创建一个Service
创建成功后在activity_main.xml中,写两个按钮
<Button
android:id="@+id/btn_startservice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动service服务"/>
<Button
android:id="@+id/btn_stopservice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止service服务"/>
在MainActivity.calss 中
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
intent = new Intent(MainActivity.this,MyService.class);
//点击启动service按钮
findViewById(R.id.btn_startservice).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//启动服务
startService(intent);
}
});
findViewById(R.id.btn_stopservice).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//停止服务
stopService(intent);
}
});
}
}
接下来我们运行项目
这个时候我们打开手机的“设置”,,然后找到“应用”,选择正在运行的应用,发现我们的应用并没有在其中
然后我们进入项目点击“启动Service服务”,然后再进入设置:
这个时候发现我们的项目正在运行
然后再次回到项目点击 “停止Service服务”,然后进入设置:
发现我们的项目又没了,,
通过这种方式我们可以把我们的程序运行在后台。
接下来我们进一步了解一下,,Service在后台怎么运行的,如何运行我们自己的代码。
我们让service在后台不断输出一个语句,来观察
在MyService类中重写一个方法,onStartCommand 这个方法在外界执行startService时就会执行。
然后在onStartCommand方法中写一个线程,来让它不断输出一个语句,每输出一句就休眠1秒钟。来看代码:
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
//这个会在外界执行startService时,就会执行
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(){
@Override
public void run() {
super.run();
while (true) {
Log.e("service","服务正在运行...");
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
return super.onStartCommand(intent, flags, startId);
}
}
效果:
这种时候我们停掉Activity,退出项目服务也不会停止。
这就是服务,我们可以用它在后台执行耗时操作