zoukankan      html  css  js  c++  java
  • Android-startService后台运行

    什么时候使用startService?

    答:APP在后台长时间运行并执行业务的时候,可以用服务,主要是看服务的特点(在后台长时间运行);

    Service相关代码:

    package liudeli.service1.service;
    
    import android.app.Service;
    
    import android.content.Intent;
    import android.os.IBinder;
    import android.util.Log;
    
    public class MyService4 extends Service {
    
        private final static String TAG = MyService4.class.getSimpleName();
    
        private final static int RUN = 1;
        private final static int NOT_RUN = 0;
    
        private int runState;
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public void onStart(Intent intent, int startId) {
            super.onStart(intent, startId);
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            runState = RUN;
            new Thread(new BackgroundRun()).start();
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
            runState = NOT_RUN;
        }
    
        /**
         * startService 不能直接执行耗时操作,需要通过异步去执行耗时操作,Service只负责长时间到在后台服务运行
         * Service是开启主线程的,Service与Activity很类似,都是开启运行主线程的
         */
        class BackgroundRun implements Runnable {
    
            @Override
            public void run() {
                while (runState == RUN) {
                    Log.d(TAG, "Background Run ......");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    MainActivity4相关代码:

        public void startService(View view) {
            startService(new Intent(this, MyService4.class));
        }
    
        public void stopService(View view) {
            stopService(new Intent(this, MyService4.class));
        }

    Log日志,Service去启动线程一秒执行一次:

    12-06 22:54:07.489 8204-8301/liudeli.service1 D/MyService4: Background Run ......
    12-06 22:54:08.490 8204-8301/liudeli.service1 D/MyService4: Background Run ......
    12-06 22:54:09.495 8204-8301/liudeli.service1 D/MyService4: Background Run ......
    12-06 22:54:10.500 8204-8301/liudeli.service1 D/MyService4: Background Run ......
    12-06 22:54:11.507 8204-8301/liudeli.service1 D/MyService4: Background Run ......
    12-06 22:54:12.508 8204-8301/liudeli.service1 D/MyService4: Background Run ......
    12-06 22:54:13.509 8204-8301/liudeli.service1 D/MyService4: Background Run ......

  • 相关阅读:
    linux基础命令:alias
    linux基础命令:find
    Linux下which、whereis、locate命令的区别
    逆元知识普及(进阶篇) ——from Judge
    BZOJ 3620: 似乎在梦中见过的样子
    HDU contest808 ACM多校第7场 Problem
    P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?LCT?...FAQ orz
    可持久化数组(线段树)[模板题]
    可持久化并(xian)查(duan)集(shu)
    主席树(静态)的轻松入门
  • 原文地址:https://www.cnblogs.com/android-deli/p/10082321.html
Copyright © 2011-2022 走看看