我有一個應用程序實現了可運行。所述可運行每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.不要優化,直到你需要。 2.爲什麼不直接使用調試器來查看哪條路徑被採用? 3.你爲什麼不測量不同的方法? – Simon
我同意西蒙。嘗試使用android的traceview工具來衡量不同方法之間的表現。 – DroidT