2012年10月21日(日)
■[Android] 内部ストレージとSystemストレージ
内部ストレージが1GBくらいあれば、ゲームとかしないかぎり不足することは無いですな! と思っていたら容量不足に。
「設定→アプリ」を見ると 476MB の空き容量があるように見えるけど、「設定→microSDと端末容量」を見ると空き容量は 114MB という表示。
わかりにくいですな。
Quick System Infoでキャッシュをまとめて消すと350MBほど確保できた。これでアップデートも無事にできた。
ブラウザのキャッシュはすぐに数百MBになってしまうので、内部ストレージが1GBくらいあっても結構簡単に無くなってしまいますな。標準ブラウザとChromeを使い分けたりしているとキャッシュも別々だから、かなり容量くってる。
購入: 1人 クリック: 3回
2012年10月5日(金)
■[Android] Android 4.0以降でテキストの表示がとても遅くなる件
Android 4.0でハードウェアアクセラレーションが有効な状態で、たくさんの文字種を表示するとパフォーマンスが激しく悪くなる件。
テスト用のAPK。Android 4.0以降用で試してください。(4.0未満だと意味がありません)
0〜100行目までは滑らかにスクロールします。
100〜200行目まではスクロールがものすごく遅くなります。(Nexus 7で10fps以下)
再現するためのコードはこんな感じです。
AndroidManifest.xml。
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="16" />
Activityのコード。
0〜100行目は各行1種類の文字だけを表示。
100〜200行目は1行に50種類の文字を表示しています。
public class ListViewTestActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listView = new ListView(this); setContentView(listView); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); char x = 0x4E9C; // 100行目までは1行に1種類の文字を100文字表示 for (int j=0; j<100; j++) { String s = ""; for (int k=0; k<100; k++) { s += Character.toString(x); } adapter.add(s); x++; } // 100行目以降は1行に50種類の文字を50文字表示 for (int j=0; j<100; j++) { String s = ""; for (int k=0; k<50; k++) { s += Character.toString(x); x++; } adapter.add(s); } listView.setAdapter(adapter); } }
ハードウェアアクセラレーションを無効にすると、30fps程度はでます。
<activity android:name=".ListViewTestActivity" android:hardwareAccelerated="false" android:label="@string/app_name" >
誰か回避方法を知っていたら教えてください。
これは極端なサンプルですが、日本語表示してるとこれに近い状況がよく発生してパフォーマンスが悪くなったりするんですよね。
たぶん英語みたいに文字が少ない環境だと、ぜんぜん問題ないんだと思いますが。