私はAndroid開発には比較的新しいので、onSaveInstanceState()について質問があります。私は現在、アプリケーションのログインアクティビティに取り組んでいます。ユーザーが自分のアカウントにログインできるかどうかを確認するために、サーバーへのコールを実行し、レスポンスコードに基づいてユーザーにアクセスを許可するかどうかを確認します。私の質問の根拠は、私が休憩コールクラスにアクティビティのコンテキストを渡すのを避けようとしているという事実に基づいています。これを行うために、私は、残りの呼び出しが成功したかどうかを表すloginアクティビティと、rest-callクラスに渡すbooleanを更新するrunnableを作成するブール値フィールドを作成します。これはAsyncTaskのアイデアに反していることは知っていますが、これが起こっている間にユーザーに待つようにダイアログボックスを表示するだけでは何も見つかりません。私の質問は以下の通りです。OnSaveInstanceState/RestCalls
1)onCreateメソッドでsavedInstanceState()を使用すると、このブール値フィールドを最初にインスタンス化して、nullのオブジェクトブール値をチェックすることを禁止しますか?私が意味するのは、アクティビティが何らかの理由で(オリエンテーションの変更など)破棄された後で、オーバーライドされたonSaveInstanceStateメソッドに格納されているブール値を使用することです。ただし、初めて作成されたときはブール値への参照がないため、ブール値を作成する必要があります。
2)このRunnableは役立ちますか?コンテキストを渡す必要はありませんでしたが、RestCall(AsyncTask)が完了する前にアクティビティが削除される場合は、コンテキストまたはRunnableを渡すかどうかが重要ですアクティビティ?私がこれについて考えると、存在しないオブジェクトを指し示す結果になるので、それが大きな違いを生み出すとは思えません。私はそれが最適ではないが、AsyncTaskの潜在的な遅れのために、私はそれが避けられないかもしれないと考え始めているので、シングルトンのデザインを使用することを避けようとしています。
私はonSaveInstanceState()がStackOverflowで多く育ったトピックであることを知っていますが、これらの質問に対する回答は見つかりませんでした。既にこのスレッドがある場合はお詫び申し上げますが、これに関するヘルプやガイダンスは大歓迎です!ありがとうございました!
ログインアクティビティ]セットアップ:
public class LoginActivity extends Activity implements View.OnClickListener {
private EditText username_et;
private EditText password_et;
private Button login_b;
private boolean login_success = true;
private Runnable run;
/**
* Instances created when app starts
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_login);
// login_success = false;
login_success = savedInstanceState.getBoolean("login_success");
username_et = (EditText) findViewById(R.id.username_text);
username_et.setOnClickListener(LoginActivity.this);
password_et = (EditText) findViewById(R.id.password_text);
password_et.setOnClickListener(LoginActivity.this);
login_b = (Button) findViewById(R.id.login_button);
login_b.setOnClickListener(LoginActivity.this);
run = new Runnable() {
@Override
public void run() {
login_success = true;
}
};
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putBoolean("login_success", login_success);
}
なぜあなたはアンドロイドから 'AsyncTask'を使っていませんか?必要なものはすべて用意されており、タスクをより詳細に制御する必要がある場合はコールバックを渡すことさえできます。 –