実現したいこと
- Androidのタスク一覧(Recent Apps)に履歴が残らない設定を行ったアプリ(以降、アプリA)で作業途中から復帰する方法
- または作業途中から復帰できてAndroidのタスク一覧(Recent Apps)に履歴が残らない設定方法
前提
現在行っているAndroidのタスク一覧(Recent Apps)に履歴が残らない設定
AndroidManifest.xml内のMainActivityへandroid:excludeFromRecents="true"
を設定
発生している問題・エラーメッセージ
アプリAで作業途中に別アプリを起動させるとアプリAで作業途中の状態に復帰できない
作業途中に復帰できるパターン
- アプリAを起動後、サブ画面ボタンを押下してサブ画面へ遷移する
- 実機のホームボタンを押下してホーム画面へ遷移する
- ホーム画面にあるアプリAのアイコンをタップする
- アプリAのサブ画面が表示される
作業途中に復帰できないパターン
- アプリAを起動後、サブ画面ボタンを押下してサブ画面へ遷移する
- 実機のホームボタンを押下してホーム画面へ遷移する
- アプリA以外の起動していないアプリ(例えばカメラアプリ)を起動する(既に起動させているサードパティアプリでは発生しない)
- 実機のホームボタンを押下してホーム画面へ遷移する
- ホーム画面にあるアプリAのアイコンをタップする
- アプリAのメイン画面(MainActivity)が表示される
該当のソースコード
AndroidManifest.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools"> 4 5 <application 6 android:allowBackup="true" 7 android:dataExtractionRules="@xml/data_extraction_rules" 8 android:fullBackupContent="@xml/backup_rules" 9 android:icon="@mipmap/ic_launcher" 10 android:label="@string/app_name" 11 android:roundIcon="@mipmap/ic_launcher_round" 12 android:supportsRtl="true" 13 android:theme="@style/Theme.LearnAndroid" 14 tools:targetApi="35"> 15 16 <activity 17 android:name=".MainActivity" 18 android:excludeFromRecents="true" 19 android:exported="true"> 20 <intent-filter> 21 <action android:name="android.intent.action.MAIN" /> 22 23 <category android:name="android.intent.category.LAUNCHER" /> 24 </intent-filter> 25 </activity> 26 27 <activity 28 android:name=".sub.SubActivity" 29 android:exported="false" /> 30 31 </application> 32 33</manifest>
MainActivity.kt
kotlin
1package com.example.learnandroid 2 3import android.content.Intent 4import android.os.Bundle 5import android.widget.Button 6import androidx.activity.enableEdgeToEdge 7import androidx.appcompat.app.AppCompatActivity 8import com.example.learnandroid.sub.SubActivity 9 10class MainActivity : AppCompatActivity() { 11 12 override fun onCreate(savedInstanceState: Bundle?) { 13 super.onCreate(savedInstanceState) 14 this.enableEdgeToEdge() 15 setContentView(R.layout.activity_main) 16 17 initButtonListener() 18 } 19 20 private fun initButtonListener() { 21 findViewById<Button>(R.id.moveSubScreenButton).apply { 22 setOnClickListener { 23 val intent = Intent(this@MainActivity, SubActivity::class.java) 24 25 startActivity(intent) 26 } 27 } 28 } 29}
activity_main.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/main" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".MainActivity"> 9 10 <Button 11 android:id="@+id/moveSubScreenButton" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:text="サブ画面" 15 app:layout_constraintBottom_toBottomOf="parent" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintStart_toStartOf="parent" 18 app:layout_constraintTop_toTopOf="parent" /> 19 20</androidx.constraintlayout.widget.ConstraintLayout>
SubActivity.kt
kotlin
1package com.example.learnandroid.sub 2 3import android.os.Bundle 4import androidx.activity.enableEdgeToEdge 5import androidx.appcompat.app.AppCompatActivity 6import com.example.learnandroid.R 7 8class SubActivity : AppCompatActivity() { 9 10 override fun onCreate(savedInstanceState: Bundle?) { 11 super.onCreate(savedInstanceState) 12 this.enableEdgeToEdge() 13 setContentView(R.layout.activity_sub) 14 } 15}
activity_sub.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/main" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".sub.SubActivity"> 9 10 <TextView 11 android:id="@+id/subScreenTitle" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:text="サブ画面" 15 app:layout_constraintBottom_toBottomOf="parent" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintStart_toStartOf="parent" 18 app:layout_constraintTop_toTopOf="parent" /> 19 20</androidx.constraintlayout.widget.ConstraintLayout>
試したこと
タスク一覧に残らない設定によりAndroidOSから優先的にKillされてしまうのではないかと考えております
- 設定アプリからアプリAのバッテリー → 制限なしに設定
→ 改善なし
2. AndroidManifest.xml内のMainActivityへandroid:excludeFromRecents="true"
を削除
→ 作業途中復帰できるがタスク一覧に履歴が残ってしまうためNG
補足情報(FW/ツールのバージョンなど)
Androidバージョン
- Android 15をターゲットとしています
動作確認環境
- エミュレータ: Pixel7 Pro API34(メモリやストレージなどの設定はデフォルトのまま変更なし)
- Aquos(SHG03)
回答1件
あなたの回答
tips
プレビュー