안녕하세요.
위젯을 포함한 어플을 개발중인 개발자 입니다.
위젯을 클릭하여 어플 내의 activity 로 들어갈 때 풀리지 않는 부분이 있어서 질문드립니다.
현재 AppWidgetProvider을 상속받은 클래스에서 activity 로 연결 할 수 있게끔
아래와 같이 처리하고 있습니다.
위젯의 버튼은 두개이며 같은 액티비티로 가고 인텐트에 담은 데이터만 다른 상태입니다.
// 첫번째 버튼 Intent oIntent = new Intent(a_oContext, TESTActivity.class); oIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); oIntent.putExtra("ID", sId); oIntent.setData(ContentUris.withAppendedId(Uri.EMPTY, nAppLayoutID)); PendingIntent oPendingIntent = PendingIntent.getActivity(a_oContext, 0, oIntent, PendingIntent.FLAG_CANCEL_CURRENT); m_oRemoteViews.setOnClickPendingIntent(nAppLayoutID, oPendingIntent); // 두번째 버튼 Intent oIntent2 = new Intent(a_oContext, TESTActivity.class); oIntent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); oIntent2.putExtra("ID", sId2); oIntent2.setData(ContentUris.withAppendedId(Uri.EMPTY, nAppLayoutID2)); PendingIntent oPendingIntent2 = PendingIntent.getActivity(a_oContext, 0, oIntent2, PendingIntent.FLAG_CANCEL_CURRENT); m_oRemoteViews.setOnClickPendingIntent(nAppLayoutID2, oPendingIntent2);
어플이 한번도 실행되지 않은 상태에서
위젯에서 클릭하여 들어가는 경우에
case 1)
1번버튼으로 클릭한 경우
처음에는 onCreate가 불리지만
TESTActivity.class 가 떠 있는 상태에서 하드웨어 home 키를 눌러 onPause 시키고
다시 위젯에서 1번 버튼을 누르면 onResume으로 오고 있습니다.
case 2)
1번 버튼으로 클릭한 경우
처음에는 onCreate가 불리고
TESTActivity.class 가 떠 있는 상태에서 하드웨어 home 키를 눌러 onPause 시키고
이번엔 위젯에서 2번버튼을 누르면 그 위에 TESTActivity.class 가 쌓이면서 onCreate가 호출됩니다.
물론 이전 TESTActivity.class 는 아래에 onPause 된 상태로 남아있습니다.
case 3)
1번 버튼으로 클릭한 경우
처음에는 onCreate가 불리고
TESTActivity.class 가 떠 있는 상태에서 하드웨어 home 키를 눌러 onPause 시키고
이번엔 위젯에서 2번버튼을 누르면 그 위에 TESTActivity.class 가 쌓이면서 onCreate가 호출됩니다.
물론 이전 TESTActivity.class 는 아래에 onPause 된 상태로 남아있습니다.
그 상태에서 다시 하드웨어 home 키를 눌러 onPause 시키고
또 위젯에서 2번버튼을 누르면 그 위에 TESTActivity.class 가 쌓이면서 onCreate가 호출됩니다.
역시 이전의 두개의 TESTActivity.class 는 남아있습니다.
현재 case중에서 문제가 되는 부분은 case 1 의 경우가 문제가 되고 있습니다.
flag_new_task 로 플래그 설정 해주면
activity 가 매번 새로 호출되는 줄 알았는데
어떤 버튼이던 처음 어플리케이션을 구동한 경우 그버튼은 액티비티를 새로 호출하는 것이 아니라
기존의 pause되어있던 상태로 액티비티를 resume해서 띄우기만 할뿐
인텐트를 새로 던져주지도 못하고 있습니다.
manifest 에서 TESTActivity.class 의 설정을 singleTask, singleTop, singleInstance 등으로 바꾸면
onNewIntent가 불리기는 하지만 TESTActivity.class 의 속성은 standard 여야하는 기능들도 있어서 바꿀수가 없네요.
그리하여
oIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
를 조정해서 해보려고 했으나
oIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
과 같이 바꾸면 새로 호출되기는 하지만 기존의 액티비티는 죽어버리더군요..
저는 액티비티는 case 2 와 case 3처럼 동작했으면 좋겠는데 말이죠...
그리하여 질문은
case 2와 case 3과 같이 activity 가 쌓이는 구조가 될수 있도록
oIntent.setFlags 에 들어갈 flag의 조합이 있을까요??
Intent.FLAG_ACTIVITY_NEW_TASK || other flag 이렇게 두개의 조합은 전부 해보았는데 무용지물이네요..ㅜ
좀 많이 긴 글이 되었지만
비슷한 질문들도 있었던 것 같아서 (답변은 못찾았네요..)
능력자분들의 조언 부탁드리겠습니다.
바쁘신데 긴글 읽어주셔서 감사드립니다.
