美文网首页
Service(四) - 创建前台进程

Service(四) - 创建前台进程

作者: 世道无情 | 来源:发表于2019-01-27 16:24 被阅读0次

    1. 前台进程


    Service 一般都执行在 后台,它优先级比较低,如果系统内存不足,可能会 回收正在运行的 Service,如果希望Service 一直运行,并且不会因为 系统不足而回收,可以创建前台Service;

    前台Service与普通Service最大的区别:
    前台Service:一直有一个正在运行的图标在系统状态栏显示,下拉后可以看到详细信息,类似于通知,有时候由于特定需求,必须要使用前台 Service,比如墨迹天气,它的 Service在后台更新天气数据的时候,还会在系统状态栏一直显示当前天气信息;

    2. 代码如下


    public class MyService extends Service {
    
        // 自己自定义MyBinder继承Binder
        private MyBinder mBinder = new MyBinder() ;
    
        @Override
        public void onCreate() {
            super.onCreate();
            Log.e("TAG" , "onCreate__executed") ;
            Log.e("TAG" , "MyService thread id is " + Thread.currentThread().getId()) ;
    
            Notification notification = new Notification(R.mipmap.ic_launcher,
                    "有通知到来", System.currentTimeMillis());
            Intent notificationIntent = new Intent(this, ServiceActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                    notificationIntent, 0);
            /*notification.setLatestEventInfo(this, "这是通知的标题", "这是通知的内容",
                    pendingIntent);*/
            startForeground(1, notification);
        }
    
    
        /**
         * 在 MyService 中开启子线程
         */
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            Log.e("TAG" , "onStartCommand__executed") ;
    
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 开始执行后台任务
                }
            }).start();
    
            return super.onStartCommand(intent, flags, startId);
        }
    
        @Override
        public void onDestroy() {
            super.onDestroy();
        }
    
    
        /**
         * Activity 与 Service关联,返回MyBinder实例对象:
         *      用于在 Activity中,通过onServiceConnected方法,指定 Service执行相关任务
         */
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return mBinder;
        }
    
    
        class MyBinder extends Binder{
    
            /**
             * 自己自定义MyBinder继承Binder,然后随便定义一个方法,
             * 用于在后台执行下载任务,这里只是做一个测试
             */
            public void startDownload(){
                // 模拟在后台下载任务
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:Service(四) - 创建前台进程

          本文链接:https://www.haomeiwen.com/subject/aznlkqtx.html