一、前台服务
service基本都是在后台进行运行的,一直都是在默默地工作,不爱表现自己(没有界面),可是这样一个基层的工作人员(service)在android系统的待遇(优先级)还是比较差的,在系统内存不足的情况下,就有可能回收掉正在后台运行的service,因此service就会停止运行。如果希望service一直保持运行,不因系统内存不足而回收,该怎么做呢?可以先考虑使用前台service,前台service和普通service的区别在于,前台service一直有一个正在运行的图标在系统的状态栏中显示。但有一点要注意的是使用前台service不代表service不能被杀死,在应用程序管理那里可以停止前台service,状态栏通知被删除了也能解除service!
那前台service有什么可以用来干什么呢?通常来说,一个音乐的播放器可以设置前台service,在状态栏中可以显示播放的歌曲相关的信息并可以作为启动按钮,打开音乐播放器,而且用户也是明确知道音乐播放器在运行的。还有天气相关的app也可以用前台service,在状态栏中实时同步更新的天气信息。
那么我们先来看看前台service的效果吧:
效果图可以看到前台service的界面,基本和一个通知信息界面差不多,然后点击停止前台service,状态栏的图标就消失了!此时前台service也就关闭了!当然用户想要停止前台service,也跟普通service一样,可以在程序管理器那里进行停止,具体看下面的效果图!
看完效果图,我们来看下代码的实现,其实基本跟普通的service差不多,就是多了需要调用startForeground()方法,这个方法需要两个参数:一个唯一标识通知的整数和给状态栏的通知!如果需要删除前台service需要调用stopForeground()方法!
主界面的代码:
package com.liangdianshui.service2;
import com.example.service2.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener {
private Button mBtStartFrontService;
private Button mBtStopFrontService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mBtStartFrontService = (Button) findViewById(R.id.bt_start_front_server);
mBtStopFrontService &#