5

I am building a android application with two Activities utilizing the Action Bar (https://github.com/johannilsson/android-actionbar as i am targeting Android 2.2).

It has a number of activities. There is a "Home" Activity, called Feed, and another activity called "Settings".

私が抱えている問題は、使用しているアクション バーのサンプルで指定されている createIntent 関数を使用すると、ユーザーがホーム ボタンをタップしてフィード アクティビティに戻ると、アクティビティが再開されずに破棄されることです。

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

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

これは大きな煩わしさであり、フィードのデータをリロードする必要があるため、アプリケーションの速度が大幅に低下します (キャッシュされますが、データをリロードするのはすぐではありません)。

では、どうすればこの動作を回避できますか? 余分なフラグがこの動作を停止するはずだと私は信じているので、なぜこれが起こっているのですか。

4

2 に答える 2

4

使用したい:

FLAG_ACTIVITY_REORDER_TO_FRONT

Androidドキュメントからの引用:

Context.startActivity() に渡された Intent に設定されている場合、このフラグにより​​、起動されたアクティビティが既に実行されている場合、そのタスクの履歴スタックの先頭に移動されます。

たとえば、A、B、C、D の 4 つのアクティビティで構成されるタスクを考えてみましょう。D がアクティビティ B のコンポーネントに解決されるインテントで startActivity() を呼び出すと、B が履歴スタックの先頭に移動されます。この結果の順序: A、C、D、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;    
}
于 2011-08-11T16:03:28.647 に答える
1

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

設定されている場合、起動されているアクティビティが現在のタスクで既に実行されている場合、そのアクティビティの新しいインスタンスを起動する代わりに、その上にある他のすべてのアクティビティが閉じられ、このインテントがに配信されます (現在上)新しいインテントとしての古いアクティビティ。

「起動されているアクティビティが現在のタスクで既に実行されている場合...」と表示されていることに注意してください。確かではありませんが、アクティビティも破棄されていることがデバッグで示されている場合、これは理にかなっています。

デバッグするとき、クラス オブジェクトの「id」番号を見ていますか? onCreate()クラスの メソッドとメソッドの両方にブレークポイントを設定し、onDestroy()それぞれのクラスの ID を確認します。それらが異なる場合、アクティビティの 2 つの異なるインスタンスがあることがわかります。

ActionBar補足/質問として、2.2が 3.0 まで利用可能にならなかった場合、どのように 2.2 を「ターゲット」にしていますか?

于 2011-08-11T15:52:21.170 に答える