广告
返回顶部
首页 > 资讯 > 移动开发 >Android学习笔记之Started Service
  • 1038
分享到

Android学习笔记之Started Service

android学习serviceAndroid 2022-06-06 13:06:33 1038人浏览 独家记忆
摘要

Started Service就是启动之后可以在后台无限期的运行,比如通过Activity组件的startService方法启动之后,如果不用指

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

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

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

布局,不说了,上图
在这里插入图片描述 在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 runningService= (ArrayList) 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;
    }
}
然后在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);
            }
        });
    }
在运行程序后点击启动按钮在Log面板中效果如下,就算是你关闭应用后台依然在不断刷新,除非点击停止按钮。
在这里插入图片描述
————————————————————————————————————————————
Started Service的生命周期:
在上面的例子中,把注释掉的Log.i()恢复,可以发现在这里插入图片描述
在点击启动按钮时会调用onCreate()和onStartCommand()方法。
在点击停止按钮时会调用onDestroy()方法。
可以看下图
在这里插入图片描述
作者:织田、信长


--结束END--

本文标题: Android学习笔记之Started Service

本文链接: https://www.lsjlt.com/news/29096.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作