0

所以,我有一个问题,我无法解决。我的应用程序使用了超过 45% 的 CPU 三星 SII。我认为主要原因是postDelayed。这是我的代码的一部分:

           Handler a=new Handler(); 
           a.post(new Runnable(){

        @Override
        public void run() {    
        Calendar cal = Calendar.getInstance(Locale.US); 
        cal.setTime(curr); 
        Format formatter = new SimpleDateFormat("\r EE \n d");
        int currentDOW = cal.get(Calendar.DAY_OF_WEEK);
        cal.add(Calendar.DAY_OF_YEAR,(currentDOW*-1)+i+2);
        den.setText(formatter.format(cal.getTime()));  
        }
            a.postDelayed(this,400); 
        });

所以,这是我代码的一部分,它可以工作,但我认为,这是 CPU 使用率高的主要原因。请帮我!谢谢!

4

2 回答 2

0

我有这个问题。在我将以下代码添加到run()工作线程中的方法之前,我的应用程序使用了大约 60% 的 CPU 时间:

@Override
public void run()
{
    while( _running )
    {
        // do usual stuff
        // ...

        // ** add the following to the end of your loop **

        try
        {
            Thread.sleep( 5 );
        }
        catch( InterruptedException e )
        {
            _running = false;
            /* at least we tried */
        }
    }
}

它现在使用约 8% 的 CPU,没有明显差异。

尝试使用值“5”。我添加了一个应用程序设置,以允许用户平衡更好的图形(即低于 5 的数字)和更好的电池使用(高于 5 的数字)。

于 2012-08-31T14:49:43.607 回答
0

您可以稍微优化一下代码,但我怀疑您根本不需要在不需要时停止更新,因此正在积累越来越多的更新。

例如,如果您更改方向,它将添加更多先前活动(已被破坏)的事件,并且您最终会获得双倍的更新率。

于 2012-08-11T13:07:34.943 回答