1

私は本当に私のAndroidアプリケーションを進めています。onDestroy() and onPause()ルーチンを実装できました。

また、Androidの通知サービスを取得して、タイトルと本文のアイコンを通知バー/タスクメニューに配置することもできました。

この通知サービスの唯一の問題は、Android アプリが既に実行されていて、ユーザーが通知をタップするとアプリの新しいインスタンスが表示されるonPause()機能を開始した場合です。super.onPause(); moveTaskToBack(true);

ユーザーが新しいインスタンスを操作すると、バックグラウンド バージョンが既に実行されているため、プログラムがクラッシュし、競合が発生します。

これが私の通知コードです。このコードが私のアプリの既に実行されているバージョンを探すのに助けが必要です:

String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificatonManager = (NotificationManager) getSystemService(ns);
int icon = R.drawable.ic_launcher;
CharSequence tickerText = "app name";
long when = System.currentTimeMillis();
CharSequence contentTitle = "app title";
CharSequence contentText = "text";
Intent notificationIntent = new Intent(this, SuperMicProActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
final int signed = 1;
mNotificatonManager.notify(signed, notification);

私が探していたonResume()のは、ある種のbringTaskToFront(this)オプションかもしれません。これは存在しますか?

ありがとう、

4

2 に答える 2

3

いくつか問題があります、私見。

そして、super.onPause();というonPause()関数を開始しました。moveTaskToBack(true);

それはかなり奇妙な振る舞いです。なぜあなたはこれをやっている?

ユーザーが新しいインスタンスを操作すると、バックグラウンドバージョンがすでに実行されているため、プログラムがクラッシュし、競合が発生します。

その場合、元のアクティビティで行われていたことは、アクティビティではなく、サービスで行われる必要があります。フォアグラウンドアクティビティがなくなると、Androidがプロセスを終了してメモリを解放する可能性はかなり高く、他に何が起こっているかによっては、かなり早く発生する可能性があります。あなたはどういうわけかまだ何かをしているその古い活動に依存しているようです。アクティビティの「バックグラウンドバージョン」は、プロセス内の他のアクティビティに影響を与えるようなことをしてはなりません。また、フォアグラウンドにないアクティビティは、アクティビティが「プーフ」になった場合にユーザーが見逃す可能性のあることを行う責任を負わないようにする必要があります。

そうは言っても、アクティビティの2番目のコピー、特にナビゲーションを避ける理由は他にもあります。現状では、ユーザーがアクティビティの2番目のコピーから[戻る]を押すと、最初のコピーが表示され、混乱します。

このコードですでに実行中のバージョンのアプリを探すのに助けが必要です

いいえ、アクティビティの「すでに実行されているバージョンをこのコードで検索するためのヘルプが必要です」。アプリはアクティビティではありません。アクティビティはアプリではありません。

とを追加するFLAG_ACTIVITY_CLEAR_TOPと、これが解決FLAG_ACTIVITY_SINGLE_TOPされます。Intent

  Intent i=new Intent(this, SuperMicProActivity.class);

  i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

  PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);

これにより、既存のアクティビティが前面に表示され、必要に応じて、タスク内の他のアクティビティが削除されます。

于 2012-02-11T20:47:22.360 に答える
0

はい、そのようなことが可能です。フラグを使用する必要があります。

http://developer.android.com/reference/android/content/Intent.html#setFlags(int

特にこれら2つを調べる必要があります。

FLAG_ACTIVITY_SINGLE_TOP
FLAG_ACTIVITY_CLEAR_TOP

于 2012-02-11T20:49:55.870 に答える