小さなアプリを作成しました(プロジェクトをリリースする予定はありません)。コードの一部が乱数のグリッドを生成し、この番号のリストからスプライトを使用してグリッドを表示します。それは少なくとも私のKindle Fire(と私が試した別のデバイス)では、期待通りに動作しました。エミュレータが自分のデバイスよりランダムでない理由は何ですか?
しかし、エミュレータは別の話です。私はエミュレートされたデバイスが一般的なサムスン(4、多分)だったと思う。同じコードをエミュレータで実行すると、グリッドの半分がスプライト1つで、半分がスプライトで塗りつぶされます。
グリッドはエミュレータ上で次のようになります。
11177
11177
11777
11777
11777
の代わりに、実際のデバイス上でこの:
64251
26253
87635
38415
28167
私のコードの関連部分(はい、私はがnew Random()
を移動する必要がありますが他の場所):
import java.util.Random;
// ... ... ...
for (int i = 0; i < GRID; i++) {
for (int j = 0; j < GRID; j++) {
paint.setColor(Color.parseColor("#FBB117"));
Random rand=new Random();
int num=rand.nextInt(8);
canvas.drawBitmap(bmp,frames[num],calcGridSpot(i,j),
paint);
//... Eventually closing braces:
}
}
I過去にJavaで、Random
がランダムではないと判断した問題がありました(私はそれが最適化のためかもしれないと考えています)。
エミュレータの動作がランダムではないのはなぜですか? (そしてどうすればいいですか?)
Androidは_own_ java.util.Randomを宣言していますか? – Laurel
@Laurelはジェネレータの実装ではなく、コンストラクタです。 – pjs
"N"リリースのソースを保持している "master"ブランチは、非常に異なる実装をしています:https://android.googlesource.com/platform/libcore/+/master/ojluni/src/main/ java/java/util/Random.java – fadden