首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >直接onResume()调用的替代方法

直接onResume()调用的替代方法
EN

Stack Overflow用户
提问于 2018-06-01 20:34:29
回答 1查看 2.8K关注 0票数 10

我正在重写我的Android应用程序,以消除对onResume()的直接调用。

我的应用程序目前在onResume()中完成了大部分工作,然后发布显示,这就是onResume()的结束。

代码语言:javascript
复制
@Override
public void onResume() {
    super.onResume();
    // get current date and time,
    //  and determine if daylight savings time is in effect.
    //...600 lines of code
    // output both the chart and report
    //
    image.setImageBitmap(heightChart);
    report.setImageBitmap(reportBitmap);
}

下一步是收集用户输入,它告诉我用户希望对报告进行哪些更改。(可以是新的位置、新的日期或新的显示样式等)。这是按如下方式完成的:

代码语言:javascript
复制
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    final int STATION_REQUEST = 1;
    int test = 1;
    switch (item.getItemId()) {
        case R.id.refresh: {
            userDateSet = false;
            onResume();
            return true;
        } // come to the present.

        //...200 lines of code
        default:
            return super.onOptionsItemSelected(item);
    }
}

如示例所示,在确定新的user命令后,通过调用onResume()重新生成输出。这是不好的做法,我已经知道了!然而,据我所知,它工作得很好,老实说,我不明白它的问题所在。

我考虑的解决方案是将600行代码收集到一个单独的例程中,然后从onResume()onOptionsItemSelected()中的多个点调用该例程

代码语言:javascript
复制
@Override
public void onResume() {
    super.onResume();
    myOnResumeCode();
}

onOptionsItemSelected()内部做这件事

代码语言:javascript
复制
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    final int STATION_REQUEST = 1;
    int test = 1;
    switch (item.getItemId()) {
        case R.id.refresh: {
            userDateSet = false;
            myOnResumeCode();
            return true;
        } // come to the present.

    ... // Other statements
}

这种方法可以接受吗?如果没有,除了“重写整个东西”之外的任何建议都会对我很有帮助。我已经广泛地寻找了一个干净的解决方案,但没有找到一个我能理解的。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-06-15 23:16:17

这是我的最终代码,感谢Ahamad的出色指导。我现在再也不调用onResume()了。在不同的地方,我调用myOnResume()。part1()代码是所有扩展计算。part2()代码是所有的输出操作。

代码语言:javascript
复制
@Override
    public void onResume()
    {   super.onResume();//
        myOnResume();
    }// end: onResume.

    void myOnResume()
    {   new Thread(new Runnable()
        {   public void run()                   //run #1
            {   part1();                        // do all the calculations in background.
                runOnUiThread(new Runnable()
                {   public void run()           //run #2
                    {   part2();                // do the display in the UI thread.
                    }                           //end of run#2
                });                             //end of runOnUiThread
            }                                   //end of run#1
        }).start();
    }                                           //end: myOnResume()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50643571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档