用于重复任务的Android处理程序 - 它会重叠吗?定时器任务VS处理程序VS警报管理器

 Snape吾爱 发布于 2022-12-18 14:07

我正在尝试构建一个Android应用程序,它将每10分钟重复运行一些进程.我发现Handlers比定时器或安排更可靠.因此,我将Handlers使用下面给出的代码来开发我的应用程序.

我有点担心以下代码会Handlers在每次启动应用程序时创建单独的并保持并行运行,可能是因为我正在创建Handleron onCreate.

那么,一次只Handler在背景中保持一次运行的最佳方法是什么?

private Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    handler = new Handler(); // new handler
    handler.postDelayed(runnable, 1000*60*10); // 10 mins int.
    setContentView(R.layout.activity_pro__sms);
} 

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        /* my set of codes for repeated work */
        foobar();
        handler.postDelayed(this, 1000*60*10); // reschedule the handler
    }
};

Bracadabra.. 6

您可以扩展Application类并在其中完成工作.

public class App extends Application {

    private Handler handler;

    @Override
    protected void onCreate() {
        super.onCreate();
        handler = new Handler(); // new handler
        handler.postDelayed(runnable, 1000*60*10); // 10 mins int.
        setContentView(R.layout.activity_pro__sms);
    } 

    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            /* my set of codes for repeated work */
            foobar();
            handler.postDelayed(this, 1000*60*10); // reschedule the handler
        }
    };
}

并在清单中声明你的课程:


编辑

但它只有在您的应用程序运行时才有效,否则您可以使用AlarmManager.

1 个回答
  • 您可以扩展Application类并在其中完成工作.

    public class App extends Application {
    
        private Handler handler;
    
        @Override
        protected void onCreate() {
            super.onCreate();
            handler = new Handler(); // new handler
            handler.postDelayed(runnable, 1000*60*10); // 10 mins int.
            setContentView(R.layout.activity_pro__sms);
        } 
    
        private Runnable runnable = new Runnable() {
            @Override
            public void run() {
                /* my set of codes for repeated work */
                foobar();
                handler.postDelayed(this, 1000*60*10); // reschedule the handler
            }
        };
    }
    

    并在清单中声明你的课程:

    <application android:name=".App">
    

    编辑

    但它只有在您的应用程序运行时才有效,否则您可以使用AlarmManager.

    2022-12-18 14:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有