3

私のAndroidアプリケーションでは、インターネットからいくつかの画像とデータを展開可能なリストビューにロードしました。そして、向きの変更を次のように処理しました。

@Override
public Object onRetainNonConfigurationInstance() {
    isOrentationChnged=true; 
    final Object data = arrGroupelements;
    return data;

}

私の onCreate() で

     if(!isOrentationChnged){
    new LongRunning().execute();

}else{

      if((String[][])getLastNonConfigurationInstance()==null){
        new LongRunning().execute();
      }else{
    arrGroupelements= (String[][]) getLastNonConfigurationInstance();
    expList.setAdapter(new ExpAdapter(cont));
      }
}

isOrentationChnged=false;

LongRunning は、インターネットからデータを取得するために使用される AsynacTask であり、方向の変更後に (インターネットから新しいデータを再度取得することなく) 以前に読み込まれたデータを読み込みますが、非常に遅いです。これを効率的に行う別の方法はありますか??

4

2 に答える 2

3

最後に、アクティビティの向きの変更を高速化する簡単な方法を手に入れました。

考え:

向きを変更するたびにアクティビティが再作成されます。これに対する解決策は、アプリケーションのマニフェスト ファイルのアクティビティ タグに次のコード行を追加することで、アクティビティの再作成を回避できます。

android:configChanges="orientation|keyboardHidden|screenSize"

方向の変更後のアクティビティの再作成を避けることで、方向の変更に対するアクティビティの応答性が向上します。

于 2013-06-05T11:54:48.373 に答える
0

David によると、 isOrentationChngedが静的に設定されていない限り、アクティビティが再作成されると常にfalseになります。

とにかくその変数は本当に必要ありません.onCreateでこれを行うだけです:

arrGroupelements = (String[][]) getLastNonConfigurationInstance();
if (null==arrGroupelements){
  new LongRunning().execute();
} else {     
  expList.setAdapter(new ExpAdapter(cont));
}

このようにして、アクティビティが再作成されている場合はデータが使用され、そうでない場合は長時間実行オペレーションが実行されます。

ところで、アダプター コンストラクターで arrGroupelements を使用しているとは思いません。

于 2012-03-25T08:14:20.793 に答える