支持多个设备时优化性能

时间:2013-10-21 19:00:11

标签: java android optimization runnable

我有一个实现可运行的应用程序。所述runnable每2.5秒运行一次。在可运行的内部,我做了一个开关,它以不同的密度布置了可运行的指令(可运行的图像在屏幕上移动,而对于xhdpi设备,他们需要移动与mdpi设备不同的参数,显然)。我的问题是,为每个分辨率列出不同的可运行文件会更有效。在运行之前,runnable是否经历了每个案例的密度?这似乎会占用大量资源。感谢您的任何见解。一些代码发布在下面:

final Handler handler = new Handler();
            final Runnable r = new Runnable() {
                public void run() {

            RelativeLayout.LayoutParams params = new     
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            RelativeLayout.LayoutParams params2 = new 
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            RelativeLayout.LayoutParams params3 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            DisplayMetrics metrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(metrics);
            switch(metrics.densityDpi){
                 case DisplayMetrics.DENSITY_LOW:
                     params.topMargin = (int)(Math.random()*704 + 1);
                     params.leftMargin = (int)(Math.random()*1334 + 1);
                     params2.topMargin = (int)(Math.random()*704 + 1);
                     params2.leftMargin = (int)(Math.random()*1334 + 1);
                     params3.topMargin = (int)(Math.random()*704 + 1);
                     params3.leftMargin = (int)(Math.random()*1334 + 1);
                     MapView.loadUrl("file:///android_asset/ldpimap.html");
                        break;
                 case DisplayMetrics.DENSITY_MEDIUM:
                     params.topMargin = (int)(Math.random()*1299 + 1);
                     params.leftMargin = (int)(Math.random()*2419 + 1);
                     params2.topMargin = (int)(Math.random()*1299 + 1);
                     params2.leftMargin = (int)(Math.random()*2419 + 1);
                     params3.topMargin = (int)(Math.random()*1299 + 1);
                     params3.leftMargin = (int)(Math.random()*2419 + 1);
                     MapView.loadUrl("file:///android_asset/mdpimap.html");
                             break;
                 case DisplayMetrics.DENSITY_HIGH:
                     params.topMargin = (int)(Math.random()*3039 + 1);
                     params.leftMargin = (int)(Math.random()*5559 + 1);
                     params2.topMargin = (int)(Math.random()*3039 + 1);
                     params2.leftMargin = (int)(Math.random()*5559 + 1);
                     params3.topMargin = (int)(Math.random()*3039 + 1);
                     params3.leftMargin = (int)(Math.random()*5559 + 1);
                     MapView.loadUrl("file:///android_asset/hdpimap.html");
                             break;
                 case DisplayMetrics.DENSITY_XHIGH:
                     params.topMargin = (int)(Math.random()*5489 + 1);
                     params.leftMargin = (int)(Math.random()*9969 + 1);
                     params2.topMargin = (int)(Math.random()*5489 + 1);
                     params2.leftMargin = (int)(Math.random()*9969 + 1);
                     params3.topMargin = (int)(Math.random()*5489 + 1);
                     params3.leftMargin = (int)(Math.random()*9969 + 1);
                     MapView.loadUrl("file:///android_asset/xhdpimap.html");
                            break;
                 case DisplayMetrics.DENSITY_XXHIGH:
                     params.topMargin = (int)(Math.random()*8649 + 1);
                     params.leftMargin = (int)(Math.random()*14749 + 1);
                     params2.topMargin = (int)(Math.random()*8649 + 1);
                     params2.leftMargin = (int)(Math.random()*14749 + 1);
                     params3.topMargin = (int)(Math.random()*8649 + 1);
                     params3.leftMargin = (int)(Math.random()*14749 + 1);
                     MapView.loadUrl("file:///android_asset/xxhdpimap.html");
            }

            fImage.setLayoutParams(params);
            fImage2.setLayoutParams(params2);
            fImage3.setLayoutParams(params3);

            handler.postDelayed(this, 2350);

                }
    };
    r.run();

1 个答案:

答案 0 :(得分:0)

  

为每个分辨率列出不同的可运行文件会更有效。

可以忽略不计。理论上,开关/如果循环内部较慢。由于分辨率从不改变,因此每次迭代的成本可能是1个周期。循环至少需要几千个周期,所以忘了它。

  

在运行之前,runnable是否经历了每个案例的密度?

不,为什么?

更重要的是干净的代码。您可以使用表格替换开关。