Android学习笔记之Started Service

混江龙づ霸主 提交于 2020-03-10 04:00:09

Started Service就是启动之后可以在后台无限期的运行,比如通过Activity组件的startService方法启动之后,如果不用指定方法关闭,这个Service就会一直运行。

下面说一下怎么来实现这种Service:

(在主界面设置两个按钮,来实现启动和停止Service,当启动Service后,在后台打印从0开始的数据的累加日志,以便我们观察)

  1. 布局,不说了,上图
    在这里插入图片描述
  2. 在File->new->Service->Service中新建一个Service,并重写里面的方法,一般来说要实现onCreate()、onBind()、onStartCommand()和onDestroy()这四个方法。
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");
    }
    //Service创建时调用
    @Override
    public void onCreate() {
        //Log.i("Service","Service创建");
        super.onCreate();
    }
    //Service启动时调用
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //Log.i("Service","Service启动");
        new Thread(new Runnable() {
            @Override
            public void run() {
                int i=0;
                while(isRunning()){
                    Log.i("Service",String.valueOf(++i));
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        return super.onStartCommand(intent, flags, startId);
    }
    //Service停止时调用
    @Override
    public void onDestroy() {
        Log.i("Service","Service凉了");
        super.onDestroy();
    }
	//这个方法是用来判断后台是否有Service在运行的
    public  boolean isRunning(){
        ActivityManager activityManager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
        //获取所有正在运行的Service
        ArrayList<ActivityManager.RunningServiceInfo> runningService= (ArrayList<ActivityManager.RunningServiceInfo>) activityManager.getRunningServices(30);//30代表最大值
       for (int i=0;i<runningService.size();i++){
           if (runningService.get(i).service.getClassName().toString().equals("com.example.demo.MyService")){
               return true;
           }
       }
        return false;
    }
}
  1. 然后在MainActivity中启动Service
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Intent intent=new Intent(MainActivity.this,MyService.class);
        Button start= (Button) findViewById(R.id.startbutton);
        start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startService(intent);
            }
        });
        Button stop= (Button) findViewById(R.id.stopbutton);
        stop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(intent);
            }
        });
    }
  1. 在运行程序后点击启动按钮在Log面板中效果如下,就算是你关闭应用后台依然在不断刷新,除非点击停止按钮。
    在这里插入图片描述
    ————————————————————————————————————————————
    Started Service的生命周期:
    在上面的例子中,把注释掉的Log.i()恢复,可以发现在这里插入图片描述
    在点击启动按钮时会调用onCreate()和onStartCommand()方法。
    在点击停止按钮时会调用onDestroy()方法。
    可以看下图
    在这里插入图片描述
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!