몇 명의 테스터에게 보낼 첫 번째 Android 앱의 릴리스 빌드를 만드는 중입니다. 그러나 나는 그것에 문제가 생겼다. 앱을 종료 한 다음 아이콘을 통해 실행하여 다시 입력하면 이전 위치로 돌아 가지 않고 전체 앱을 다시 시작합니다. 퇴장 후 바로 재 입장하더라도 발생합니다. 하지만 홈 버튼을 누른 상태에서 최근 앱 목록을 통해 실행하면 발생하지 않습니다.
나는이 문제가있는 다른 사람들을 온라인으로 검색했고 몇 가지가 있지만, 왜 그들에게 일어나는지에 대한 확실한 답을 가진 사람은 없습니다. 매니페스트 파일에서 launchmode를 singletask 또는 singleinstance로 설정하는 것이 오래된 질문에서 제안되었지만 도움이되지 않았습니다. 게다가 내가 이해하는 바에서 Android의 기본 동작은 작업의 이전 상태로 돌아가는 것입니다. 이 상황에서는 왜 그렇게하기 위해 특별한 매니페스트 옵션이 필요한지 모르겠습니다.
이 문제에 대한 가장 기이 한 점은 이클립스와 디버거를 사용하여 앱을 내 폰에 넣으면이 문제가 발생하지 않는다는 것입니다. 디버거에 연결할 필요조차 없습니다. 앱의 디버그 버전이 있으면 문제가 발생하지 않는 것 같습니다. 그러나 릴리스 버전을 사용하면 (이클립스에서 Android 도구-서명 된 애플리케이션 패키지 내보내기 메뉴 옵션을 사용하여 생성) 문제가 발생합니다. 이 문제의 원인에 대한 통찰력이있는 사람이 있다면 여러분의 생각을 듣고 싶습니다.
답변
나는 응용 프로그램에 동일한 문제가 있었고 AndroidManifest.xml 파일 의 선언 "android:launchMode="singleTop""
대신 플래그 를 추가 하여이 동작을 해결했습니다 . 이것이 누군가를 도울 수 있기를 바랍니다."android:launchMode="singleTask""
<activity>
답변
지금까지 실제 장치에 설치하는 방법에 따라 문제가 있음을 발견했습니다. 특히 다음과 같습니다.
- APK를 복사하여 기기의 로컬 저장소에 붙여넣고 서명 여부에 관계없이 기기에서 설치하면이 동작이 표시되고 메뉴 아이콘에서 앱이 다시 시작됩니다.
다음 옵션 중 하나를 사용하여 설치하면이 문제가 나타나지 않습니다.
-
터미널 또는 명령 프롬프트를 사용하여 sdk / tools /로 이동 한 다음 입력
adb install <FILE PATH OF .APK FILE>
Linux에서는 다음을 입력합니다.
./adb install <FILE PATH OF .APK FILE>
-
Eclipse에서 프로젝트를 실행하기 만하면됩니다.
베타 테스트를 위해 올바른 APK를 배포 할 수있는 방법이 있는지 알고 싶습니다. APK를 복사하여 붙여넣고 수동으로 설치하면 악성 동작이 표시되기 때문에 이미 서명 된 APK 내보내기를 시도했습니다.
최신 정보:
해결책을 찾았습니다. 다음 두 단계를 따르십시오.
- 활동 태그 내의 AndroidMainifest.xml
android:launchMode="singleTask" = true
에서 앱의 모든 활동에 대해 설정 합니다 . -
이 코드를 런처 활동의
onCreate()
.if (!isTaskRoot()) { final Intent intent = getIntent(); final String intentAction = intent.getAction(); if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) { finish(); return; } }
이 동작은 Android의 버그입니다. 특별한 경우가 아닙니다.
답변
또 다른 이상한 원인은 Copy-to-Device-&-Install 후 “OPEN”을 클릭하여 앱이 시작된 경우에만 다시 시작된다는 것입니다.
OS8.1에서 테스트하고 launchMode가 작동하지 않습니다.
답변
AndroidManifest.xml 의 Launcher 활동에 대한 singleTop 으로 launchMode를 사용할 수 있습니다.
<activity
android:name="<YOUR_ACTIVITY>"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
답변
// To prevent launching another instance of app on clicking app icon
if (!isTaskRoot()
&& getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
&& getIntent().getAction() != null
&& getIntent().getAction().equals(Intent.ACTION_MAIN)) {
finish();
return;
}
setContentView를 호출하기 전에 런처 활동에 위 코드를 작성하십시오. 이것은 문제를 해결할 것입니다
답변
Android의 기본 동작입니다. 디버그 빌드의 경우 어떤 이유로 든 다르게 작동합니다. android:launchMode="singleInstance"
활동 에 추가 하여 해결할 수 있으며 아이콘에서 시작한 후 다시 시작하고 싶습니다.
답변
다음을 첫 번째 활동에 추가하십시오.
if (!isTaskRoot()) {
finish();
return;
}
super.onCreate(savedInstanceState);