我有一个实现可运行的应用程序。所述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();
答案 0 :(得分:0)
为每个分辨率列出不同的可运行文件会更有效。
可以忽略不计。理论上,开关/如果循环内部较慢。由于分辨率从不改变,因此每次迭代的成本可能是1个周期。循环至少需要几千个周期,所以忘了它。
在运行之前,runnable是否经历了每个案例的密度?
不,为什么?
更重要的是干净的代码。您可以使用表格替换开关。