如何提高以下代码的性能?

时间:2012-01-23 09:31:14

标签: android performance

我有以下代码显示带有字母的图片

public class MainActivity extends Activity 
{
    private String[] capital_letters,small_letters;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart()
    {
        super.onStart();

        try
        {
            capital_letters = getApplicationContext().getResources().getStringArray( R.array.capital_letters );
            small_letters = getApplicationContext().getResources().getStringArray( R.array.small_letters );

            MyAdapter adapter = new MyAdapter ( MainActivity.this ,capital_letters,small_letters );
            ListView list = ( ListView ) findViewById( R.id.list );
            list.setAdapter( adapter );

            list.setOnItemClickListener( new AdapterView.OnItemClickListener() 
            {
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int position,long id ) 
                {
                    Intent intent = new Intent ( MainActivity.this, LetterActivity.class );
                    intent.putExtra( "position", position );
                    intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    startActivity(intent);
                    overridePendingTransition( 0, 0 );
                }
            });
        }
        catch ( Exception e ){e.printStackTrace();}
    }
}

如何使我的代码重量轻,工作非常顺畅。平滑的性能意义,正确的变量声明,循环,垃圾收集使用等?

3 个答案:

答案 0 :(得分:5)

你并不是唯一一个想要获得正确声明变量,优化循环等所需的性能的人。

但如果你只是坐下来这样做,你最终会修复那些没有破坏的东西。

性能调优的关键是:首先找出需要修复的内容。

这就是探查者应该帮助你做的事情。 就个人而言,我使用 random pausing ,很多人都这样做。 这是一个简短的PDF slide show

这笔交易是,除非您的代码非常简单(在这种情况下它可能没有太大的加速空间),它可能有多个你可以修复的东西来加速它。 假设有三个:

  • A,负责总时间的40%
  • B,负责总时间的20%
  • C,负责总时间的10%

好的,首先你找到A,然后修复它。你得到多少加速? (1 /(1-.4))= 1.67或67%。 不错

但如果再看一下百分比,现在:

  • B需要33%(因为它需要的时间和以前一样多,但是总数不再被A膨胀了)
  • C需要17%

所以它们应该更容易找到,因为它们占据更大的百分比。 你明白了。

如果你修复了所有,你会获得多少加速? 1 /(1 - .7))= 3.33 = 233%

如果还有更多,比如D和E,那么你可以更进一步。

但如果你错过任何一个,你会获得多少加速? 该项目成为您的限速器。 所以继续前进,直到你找不到更多。

去吧,玩得开心!

答案 1 :(得分:2)

这取决于您的具体应用程序,以给出一般答案。但谷歌已经在a performance guide写了特定于Android的提示。我建议你阅读。

当然,它并没有考虑到一般的性能提示,但我希望你已经知道了。如果不是,你应该尝试找一些关于程序的一般性能调整和特定于Java的性能技巧的资源,尽管并非所有后者都适用于Android。

尽管很多这些技巧(非常轻微地)提高了性能,但它们并不总是从软件设计(例如可维护性和可移植性)的角度来看是最好的决策。其中很多只是&#34;技巧&#34;这可以由编译器自动化,因此可能会被合并到更高版本的JIT中。由于指南是针对2.3编写的,因此它们甚至可能已经在4.0中。

答案 2 :(得分:1)

看一下this question and all its answers关于android的性能优化的话题。