2

Android ライフサイクルの概念と関連するさまざまなイベントを理解しています。ユーザーに自分の番になったことを知らせる通知サービスを作成しました。ユーザーがアプリケーション内のアクティビティのいずれかを表示しなくなったときにのみ、これを実行したいと考えています。アプリケーションを使用している間、彼/彼女は自分の番かどうかを知ることができます。

質問:

  • Main.java クラスでライフサイクル イベントを設定した場合、ユーザーが別のクラスに移動するとどうなりますか? onPause イベントは発生しますか? ユーザーが 1 回のセッション中に 10 以上のアクティビティを終了する可能性がある場合、システムはどの onPause イベントを実行するかをどのように判断しますか?

  • 現在、Main.java クラスの onStop および onRestart イベント中にサービスを開始および停止しています。これは期待どおりに機能していません。システム内にいても通知が発生し、外部 API への同時呼び出しが原因でシステムがロックアップします。(下記参照)。

    public void onRestart() {
    super.onRestart();
    
    Intent i = new Intent(Main.this, NotifyService.class);
    Main.this.stopService(i);   
    

    }

    public void onStop() {
        super.onStop();
    
    Intent i = new Intent(Main.this, NotifyService.class);
    i.putExtra("UserId", userId);
    Main.this.startService(i);
    

    }

どんな助けでも大歓迎です。

4

2 に答える 2

1
  1. Activity-A にいて、Activity-B に移動すると、Activty-A のライフサイクル コールバックが呼び出されます。この場合、Activity-A.onPause() がすぐに呼び出され、Activity-A.onDestroy ( )その間にActivity-Aが破壊された場合は短時間。

  2. サービスの開始/停止に使用する正しいメソッドは、onResume() (使用する onRestart() の代わりに) と onPause() (使用する onStop() の代わりに) です。

于 2012-07-17T14:37:13.453 に答える
0

カウンターを設定し、Activity の onResume() でインクリメントし、onPause() でデクリメントすることができます。カウンターが 0 の場合、ユーザーがアクティビティに参加していない (他のアプリを使用している) ことを意味します。1 でない場合、ユーザーはあなたのアプリを使用しています。カウンターは削除される可能性があるため、アクティビティの外に保管する必要があることに注意してください。Application クラスをサブクラス化し、そのグローバル スコープのカウンターをそこに保持します。

于 2012-07-17T12:21:04.063 に答える