【问题标题】:Basic & Common doubts regarding Android background services关于Android后台服务的基本和常见疑问
【发布时间】:2021-01-03 07:33:23
【问题描述】:

我对 Android 中的后台服务有一些疑问:-
1)。我正在创建一个需要定期在后台做一些工作的应用程序。通过背景,我的意思是即使应用程序关闭(从应用程序抽屉或手机重新启动或任何东西刷卡)。那么实现这一点的最佳方法是什么?我擅长在 Android 和 Flutter 中编码。因此,即使是高级别的概述也会有所帮助。
2)。该解决方案会消耗大量电池,还是会像 WhatsApp 或其他应用程序一样定期发送通知?

如果提供的解决方案与最新版本的 Android 完美配合,那将非常有帮助。
谢谢。

【问题讨论】:

    标签: android flutter mobile-application


    【解决方案1】:

    基本上没有可靠的方法来执行后台作业。 但是有一些解决方法。

    这是我的解决方案:

    在你的类扩展应用程序中:

    private AlarmManager awakeAlarmMgr;
    private PendingIntent awakeAlarmIntent;
    
    public void startBackService() {
            
            Log.d(TAG,"BACK SERVICE STARTED")
    
               
            // START ALL SERVICES
            startStepService();
            startLocationService();
            setAllReminders();
    
            // SET AN ALARM TO KEEP ALL SERVICES ALIVE
            startStayAwakeAlarm();
           
        }
    
    
    private void startStayAwakeAlarm() {
    
            awakeAlarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);
    
            if(awakeAlarmIntent!=null)
                awakeAlarmMgr.cancel(awakeAlarmIntent);
    
            Intent intent = new Intent(context, StayAwakeReceiver.class);
            awakeAlarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    
            awakeAlarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_HALF_HOUR,
                    AlarmManager.INTERVAL_HALF_HOUR, awakeAlarmIntent);
        }
    
    

    在 StayAwakeReceiver.java 中:

    public class StayAwakeReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
    
            Log.d(TAG,"STAY AWAKE!!!");
    
            AppController.getInstance().startBackService();
    
        }
    }
    

    别忘了在你的 Manifest 中声明接收者:

            <receiver android:name=".receiver.StayAwakeReceiver" />
    

    并在您的应用程序的 onCreate 中调用 startBackService()

    【讨论】:

    • 我知道。基本上,该服务在完成分配的工作后结束,并且为了使其保持活力,我们只需重新启动它,对吗?我假设有更好的方法。
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多