2011-07-30 14 views
14

単純なオリエンテーションの変更で活動を破壊したり再作成したりするためのAndroid設計の根拠を知っている人はいますか?Androidでオリエンテーション変更のアクティビティを再作成する理由

アクティビティがより簡単でより実用的なデザインになるようにしなければなりませんか?

ところで、私は姿勢変更の影響からの私のアプリを無効にする方法をよく知ってんだけど、私が実際に取得しないこと

+1

これはプログラミングに関する質問です。 Android愛好家は、Androidのユーザーにとってより多くのことです。あなたの質問をStackOverflowに移動しています。 –

+0

当初はここに投稿することを考えていましたが、それが属しているかどうかはわかりませんでした。それをクリアしていただきありがとうございます:) –

答えて

1

いけない、私の推測がある理由を正確に知っているアンドロイドでこの設計の理由です画面上のアクティビティを再構成する必要があるためです。

OnCreateは、変数 "Bundle savedInstanceState"を取り込みます。データのリロードを高速化するために、そこにデータを保存することができます。ドキュメントで

package com.android.hello; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class HelloAndroid extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mTextView = new TextView(this); 

     if (savedInstanceState == null) { 
      mTextView.setText("Welcome to HelloAndroid!"); 
     } else { 
      mTextView.setText("Welcome back."); 
     } 

     setContentView(mTextView); 
    } 

    private TextView mTextView = null; 
} 
8

http://developer.android.com/guide/topics/resources/runtime-changes.html

それは再起動動作は、アプリケーションが自動的に代替リソースを使用してアプリケーションを再ロードすることによって、新たな構成に適応するために設計されて

、と述べています。

+4

副作用のように他の多くの問題が発生すると、実際には "助け"はありません(たとえば、AsyncTasksがぶら下がっている、ダイアログがシームレスに続かないなど)。実際に必要なのは、現在のコンポーネントを画面に再描画/レイアウトするだけで、これを確実にする簡単な方法です(アクティビティを破棄して再作成する必要はありません)。 –

+5

再描画が必要です。 Androidは、2つの画面方向に対して異なるリソース(画像、文字列、テーマ、スタイル、レイアウトなど)を持つ機能を提供します。これらを手動でリロードすることは、ダイアログとasynctaskを処理するよりはるかに多くの作業になります。 –

+2

Hmmm ...アクティビティを破壊して再作成して、アプリケーションが必要とする追加のリソースをリロードできるようにするよりもはるかに軽量です。 –

1

これはかなり簡単です。 Androidはオリエンテーションの変更に関するアクティビティを破壊して再作成するので、あなた(開発者)は以前のレイアウトをそのまま使用するか、別のレイアウトを使用して実装することができます。

+1

あなたは正しいですが、その根拠は完全に間違っています意見_。ドキュメントは破壊について述べています: '[..]はアクティビティが終了したために起こります[..]、またはシステムが一時的にスペースを節約するためにこのアクティビティのインスタンスを破壊しているためです。これはオリエンテーションの変更を排除するものではありませんが、このように動作するのは奇妙に思えます。これまでのところ、私が「自然な」「破壊」を引き起こす唯一の方法は、画面を回転させることです。 「休止」に続いて「再開」を行うことは、私にとってもっと論理的なようです。また、「再開」は誤称であるが、それを除いて。 – pauluss86

関連する問題