2012-02-21 13 views
1

電話機が特定の種類の充電器に接続され、「カーモード」または「運転モード」に入るときに、アプリケーションで発生する問題を処理しようとしています。Android - onDestroy()後のUI要素のスコープを失う

実行中のアプリケーションでは、onDestroy()が呼び出された直後にonCreate()が実行され、アプリケーションが正常に再開します。しかし、それ以降のUI要素の更新(新しく作成されたメインアクティビティ)の呼び出しは無効になり、レイアウト上の範囲が失われたように見えます。

RelativeLayout splash = (RelativeLayout) findViewById(R.id.splash); 
    splash.setVisibility(View.VISIBLE); 

私が考慮していないonDestroy()の原因は何ですか?私は私が必要とは思わなかったので、デストロイで多くのクリーンアップをしません。

+0

私は同じ問題を抱えています。あなたはそれを解決しましたか? – takluiper

答えて

0

onDestroy()が呼び出されるまでにActivityがUIから切り離されているため、UIコールを受けても意味がありません。スプラッシュを表示する必要がある場合は、View.VISIBLEonCreate()onResume()、またはonPause()に設定します。 onPause()が違うとすれば、私は完全にはわかりません。

+0

申し訳ありませんが、私が参照しているUI呼び出しは、onCreateの新しい呼び出しの後に新しいアクティビティで発生します – TomBomb

+0

その場合、レイアウトの新しいインスタンスをインスタンス化するために 'setContentView()'を呼び出していますか?古いものは古い 'Activity's'コンテキストの一部であり、破壊されているので、新しいものが必要です。 – DeeV

+0

はい私はsetContentView()をもう一度呼び出していますが、私は通常、メインアクティビティのインスタンス化方法とは異なる何もしません。 – TomBomb

0

電話機が回転すると、アクティビティは破棄され、再作成されます。車の充電器にプラグを差し込むと、通常、携帯電話は風景モードになり、回転させると(おそらく肖像画から)、onDestroyに電話をかけます。いくつかのアクティビティフラグでこの動作を防止する方法がありますが、Googleはそれに対してアドバイスしています。

何が起こっているのか把握するために、このアクティビティのコードをさらに見る必要があります。

また、DeeVが指摘しているように、onDestroyが呼び出されるまでにアクティビティが長く消えてしまったので、何をしているのかは適切な場所ではないかもしれませんが、必ず。

サイドノートとして、キーボードをスライドさせると(スライドアウトキーボードを備えた電話機で)同じ効果が得られます。

+0

はい、私はこれまでこの動作を見てきました。 スプラッシュが表示されているレイアウトではなく、それ自身で新しいアクティビティになるように、主なアクティビティを変更しました。しかし、私のアプリがonDestroy()/ onCreatedになった後、finishActivity(AppState.ACTIVITY_SPLASH)の呼び出しは効果がありません。 – TomBomb

関連する問題