2011-08-11 10 views
5

私はAndroid 2.2をターゲットにしているため、アクションバー(https://github.com/johannilsson/android-actionbar)を利用して2つのアクティビティでアンドロイドアプリケーションを構築しています。アンドロイドはアクティビティに戻ったときに破棄され、再開されません。

さまざまなアクティビティがあります。フィードと呼ばれる「ホーム」アクティビティと、「設定」という別のアクティビティがあります。

私が抱えている問題は、使用しているアクションバーのサンプルで与えられたcreateIntent関数を使用すると、ユーザーがホームボタンをタップしてFeedアクティビティに戻るときに、アクティビティがまだ破棄されるということです。

デバッグを少し行うと、アクティビティが最初に一時停止して停止したときではなく、再開要求が発生したときに、破棄されていることがわかりました。

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
    return i;  
} 

これは大きな迷惑であり、それは、(データのリロードを取得するには、キャッシュされたが、その瞬間されていません)、フィードのためにそのデータを再ロードする必要があるため、かなりのアプリケーションが遅くなります。

どうすればこの現象を回避できますか?なぜこのようなことが起こっているのでしょうか?余分な旗がこの行動を止めるべきだと私は信じています。

答えて

4

あなたが使用したい:Androidのdocsから

FLAG_ACTIVITY_REORDER_TO_FRONT 

引用:

Context.startActivity(に渡されたインテントに設定した場合)、このフラグは 立ち上げ活動が可能になりますすでに実行中の場合は、タスクの 履歴スタックの前面に表示されます。

例えば、A、B、C、 の4つのアクティビティで構成されるタスクを考えてみましょう。A、C、D、B.このフラグは う:Dは活性Bの コンポーネントに解決される目的でstartActivity()を呼び出した場合、Bは、この得られた順序で、 履歴スタックの前方に移動しますFLAG_ACTIVITY_CLEAR_TOPも指定されている場合、無視すること。

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
    return i;  
} 
1

どのクラスが何を起動しているかによって、アクティビティの新しいインスタンスが起動され、古いインスタンスが破棄されている可能性があります。これは、ドキュメントを約FLAG_ACTIVITY_CLEAR_TOPこう言われる、

設定した場合、および起動され活動は、すでに他の活動のすべての上に、そして、現在のタスクで実行中の代わりに、そのアクティビティの新しいインスタンスを起動していますそれは閉じられ、このインテントは新しいインテントとしての古いアクティビティに配信されます。だから私はよく分からない「を起動さアクティビティーが既に...現在のタスクで実行されている場合」が、あなたのデバッグがアクティビティことを示している場合、これは理にかなってそれが言うことを

お知らせまた破壊されている。

デバッグ時に、クラスオブジェクトの「id」番号を調べていますか?クラスのonCreate()onDestroy()の両方のメソッドにブレークポイントを設定し、それぞれのクラス内のクラスのIDを調べます。それらが異なる場合、あなたはあなたの活動の2つの異なるインスタンスがあることを知っています。

ActionBarが3.0まで利用できなかった場合、どのように「ターゲット設定」するのですか?

+1

私は彼が使用しているアクションバーが3.0 :)で外観をシミュレートするために、自家製のバージョンだと思います。私はそれを自分自身を使用しているし、それはかなりうまく動作します。 – Jack

+0

私はブレークポイントを設定し、監視対象のidの、そしてその同じidを、私はその破壊され、その後(そのIDの変更)を再作成する際の活動に復帰しようとするまでは、しかし意図が呼ばれたとき、それは破壊されます。 私は問題はいえ停止している活動に関連しているので、それが実行されていない、そしてそれが破壊され、再作成されますなぜthatsのを感じています。 – lloydsparkes

関連する問題