1

저는 정말 내 안드로이드 응용 프로그램으로 전진하고 있습니다. 나는 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

몇 가지 문제가 있습니다. IMHO.

이며 onPause() 함수가 시작되었습니다. super.onPause(); moveTaskToBack (true);

다소 이상한 행동입니다. 왜 이런 짓을하는?

일단 사용자가 새 인스턴스와 상호 작용하면 배경 버전이 이미 실행되어 충돌을 일으키기 때문에 프로그램이 중단됩니다.

원래 활동에서 수행 된 모든 작업은 전혀 활동이 아니어야합니다. 일단 포 그라운드 활동이 없으면 안드로이드가 메모리를 확보하기 위해 프로세스를 종료 할 확률이 상당히 높아서 다른 작업에 따라 다소 빨리 발생할 수 있습니다. 당신은 그 오래된 활동에 의존하고있는 것처럼 여겨지고 있습니다. 활동의 "백그라운드 버전"은 프로세스의 다른 활동에 영향을 줄 수있는 어떤 것도 수행해서는 안되며, 포어 그라운드에없는 활동은 활동이 "멍청한"상태가되면 사용자가 놓칠 수있는 일을해서는 안됩니다.

활동의 두 번째 사본, 특히 탐색을 피하는 다른 이유가 있습니다. 사용자가 활동의 두 번째 사본에서 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

아주 좋습니다. 내 첫 번째 질문 아래에서 내 의견을 보면 manifest 파일에 single top을 추가했습니다. 귀하가 제공 한 새로운 인 텐트 코드를 추가하면 다른 기기에서 더 많은 중복을 허용합니까, 아니면 모든 안드로이드 기기가 매니 페스트 파일에서 하나의 상단을 따를 것입니까? 나는 그것을'onResume()'에서 사용할 것인가? –

+0

우수 설명. –

+0

@MarcBrown : 모든 장치가 매니페스트 파일을 따릅니다. "onResume()에서 사용하겠습니까?" - 당신은'onResume()'에서 무엇을 사용하겠습니까? – CommonsWare

관련 문제