后台定时任务(从开机起,开启一个app级HTTP服务器)

接收广播:

里面开启一个服务LongRunningService;

接收开机广播,也接收LongRunningService发出的广播。


public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent i = new Intent(FaceApplication.getContext(), LongRunningService.class);
        i.putExtra("type",1);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            context.startForegroundService(i);
        } else {
            context.startService(i);
        }
    }
}

被开启的服务:

里面每5s发送一广播给AlarmReceiver

里面开线程执行自己想要干的任务(开启一个HTTP服务器)


public class LongRunningService extends Service {
    private MyAppServer mywebserver;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        int type = intent.getIntExtra("type",1);
        Log.d("[WebServer][LongRunnin]", "type :"+type);
        if(type == 1){
            createNotificationChannel();
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    //1.开启HTTP服务器
                    mywebserver = new MyAppServer(LongRunningService.this);
                    mywebserver.start();
                    Log.d("[WebServer][LongRunnin]", "WebServer start success");

                } catch (IOException e) {
                    e.printStackTrace();
                    Log.d("[WebServer][LongRunnin]", "WebServer start failed"+ e.getMessage());
                }
            }
        }).start();
        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        int anHour = 5*1000;  // 这是一小时的毫秒数:60 * 60 * 1000
        long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
        Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
        return super.onStartCommand(intent, flags, startId);
    }


    private void createNotificationChannel() {
        Notification notification1 = new Notification.Builder(this).build();
        startForeground(1, notification1);
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
//        if (mywebserver != null) {
//            mywebserver.closeAllConnections();
//            mywebserver = null;
//            Log.e("onPause", "app pause, so web server close");
//        }
    }
}

清单文件注册开机广播:

        <service android:name=".httptest.alarm.LongRunningService"></service>

        <receiver android:name=".httptest.alarm.AlarmReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值