9

画面の向きの変更を処理するために、次のコードを実装しようとしました。

****DataBaseUpdateService.java****

public class DataBaseUpdateService extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState); 

        Updatetask Task = new Updatetask(this.getApplicationContext());
            if(Task.getStatus() == AsyncTask.Status.PENDING){
            Task.execute();};
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }

    @Override
    public void  onPause() {
        super.onPause();
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

================================================== ========================

****Androidmanifest.xml****
 <activity 
  android:name=".DataBaseUpdateService"
  android:configChanges="keyboardHidden|orientation"/>

これらのコードは、Android 3.x 以下で完全に機能します。ただし、android 4.x では正しく動作しません。

何が問題なのか分かりますか??

4

3 に答える 3

27

付加screenSize価値もつけます。

ドキュメントから:

: アプリケーションが API レベル 13 以上 ( minSdkVersion および targetSdkVersion 属性で宣言されている) をターゲットにしている場合は、screenSize構成も宣言する必要があります。これは、デバイスが縦向きと横向きの間で切り替わったときにも変更されるためです。

したがって、マニフェストは次のようになります (向きの変更を自分で処理したい場合)。

****Androidmanifest.xml****
 <activity 
  android:name=".DataBaseUpdateService"
  android:configChanges="keyboardHidden|orientation|screenSize"/>
于 2012-07-24T12:36:07.277 に答える
0

これが機能するかどうかは 100% 確信が持てませんが、onNonConfigurationChangedInstance() を使用して AsyncTask を保存してみてください。

// Declare a member variable
private UpdateTast task;

public void onCreate(){

    // Attempt to get the asynctask instance 
    task=(UpdateTask)this.getLastNonConfigurationInstance();

    // If it's null create a new instance
    if(task==null){
       task = new Updatetask(this.getApplicationContext());
        task.execute().

    }

    // If it is not null, then the reference returned by getLastNonConfigurationInstance(); will be used.
}

// And lastly override onRetainNonConfigurationInstance method:
@Override
public Object onRetainNonConfigurationInstance() {          
    return task
}
于 2012-07-24T12:36:39.757 に答える