1

私は実際にAndroidアプリケーションを進めています。私はonDestroy() and onPause()ルーチンを実装することができました。Android SDK NOTIFICATION_SERVICEを再開するには、新しいインスタンスを起動しないでください。

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

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

ユーザーが新しいインスタンスとやり取りすると、バックグラウンドバージョンが既に実行されているため競合が発生するため、プログラムがクラッシュします。私はbringTaskToFront(this)オプションのいくつかの並べ替えも可能でonResume()を見ていた

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); 

は、ここで私は私のアプリのすでに実行されているバージョンのこのコードを見て作るの助けを必要とする、私の通知コードです。これは存在しますか?

ありがとう、

+0

ネヴァーマインド。 私は単にManifestファイルを開き、私の '

答えて

3

あなたはいくつかの問題があります。

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

これはむしろ奇妙な動作です。なぜあなたはこれをやっている?

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

元のアクティビティで行われていたことは、アクティビティには含まれていませんが、サービス中であってはなりません。フォアグラウンドの活動がなくなると、Androidを解放してメモリを解放する確率はかなり高く、他に何が起きているかによってはかなり早く発生する可能性があります。あなたは何らかの形で何かをしている古い活動に頼っているようです。アクティビティの "バックグラウンドバージョン"は、プロセス内の他のアクティビティに影響を与えるものであってはなりません。また、フォアグラウンド以外のアクティビティは、アクティビティが "うまくいく"場合にユーザーが見逃す可能性があります。

あなたのアクティビティの2番目のコピーを持つことを避ける他の理由があります。特に、ナビゲーションは、ユーザーがアクティビティの2番目のコピーからBACKを押すと、最初のコピーが表示され、混乱する。

私は私のアプリ

のすでに実行されているバージョンについては、このコードを見て作るの助けを必要としません、あなたはあなたの活動「のすでに実行されているバージョンについては、このコードを見て作るの助けが必要」。アプリはアクティビティではありません。アクティビティはアプリではありません。

あなたIntentからFLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOPを追加すると、この問題を解決します:これは、フォアグラウンドに、既存の活動をもたらすと、必要であれば、あなたのタスクに他の活動を取り除く

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); 

+0

非常に良い。私の最初の質問の下で私のコメントを見て、私はマニフェストファイルに一番上を追加しました。あなたが私に与えた新しいインテントコードを追加すると、他のデバイスでより多くの冗長性が可能になりますか、またはすべてのアンドロイドデバイスがマニフェストファイル内の単一のトップに続きますか?私は 'onResume()'でそれを使いますか? –

+0

優れた説明。 –

+0

@MarcBrown:すべてのデバイスがマニフェストファイルに従います。 「onResume()でそれを使用しますか?」あなたは 'onResume()'で何を使用しますか? – CommonsWare

関連する問題