質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

213閲覧

Android タスク一覧(Recent Apps)に履歴が残らない設定を行うと作業途中から復帰できない

Elspeth

総合スコア1

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2024/12/10 06:46

実現したいこと

  • Androidのタスク一覧(Recent Apps)に履歴が残らない設定を行ったアプリ(以降、アプリA)で作業途中から復帰する方法
  • または作業途中から復帰できてAndroidのタスク一覧(Recent Apps)に履歴が残らない設定方法

前提

現在行っているAndroidのタスク一覧(Recent Apps)に履歴が残らない設定

AndroidManifest.xml内のMainActivityへandroid:excludeFromRecents="true"を設定

発生している問題・エラーメッセージ

アプリAで作業途中に別アプリを起動させるとアプリAで作業途中の状態に復帰できない

作業途中に復帰できるパターン

  1. アプリAを起動後、サブ画面ボタンを押下してサブ画面へ遷移する
  2. 実機のホームボタンを押下してホーム画面へ遷移する
  3. ホーム画面にあるアプリAのアイコンをタップする
  4. アプリAのサブ画面が表示される

作業途中に復帰できないパターン

  1. アプリAを起動後、サブ画面ボタンを押下してサブ画面へ遷移する
  2. 実機のホームボタンを押下してホーム画面へ遷移する
  3. アプリA以外の起動していないアプリ(例えばカメラアプリ)を起動する(既に起動させているサードパティアプリでは発生しない)
  4. 実機のホームボタンを押下してホーム画面へ遷移する
  5. ホーム画面にあるアプリAのアイコンをタップする
  6. アプリ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されてしまうのではないかと考えております

  1. 設定アプリからアプリAのバッテリー → 制限なしに設定

→ 改善なし
2. AndroidManifest.xml内のMainActivityへandroid:excludeFromRecents="true"を削除
→ 作業途中復帰できるがタスク一覧に履歴が残ってしまうためNG

補足情報(FW/ツールのバージョンなど)

Androidバージョン

  • Android 15をターゲットとしています

動作確認環境

  1. エミュレータ: Pixel7 Pro API34(メモリやストレージなどの設定はデフォルトのまま変更なし)
  2. Aquos(SHG03)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2024/12/11 14:57

>AndroidOSから優先的にKillされてしまうのでは kill もなにも、履歴が無いのなら復帰しようが無いように思いますけども。
Elspeth

2024/12/12 02:40

コメントありがとうございます! > kill もなにも、履歴が無いのなら復帰しようが無いように思いますけども。 すみません、コメントいただいた文章で「復帰」と言われているのはどちらでしょうか? 1. アプリAをユーザが見える状態にフロントへ戻すこと 2. アプリAを画面遷移やユーザが入力した状態へ戻すこと 1の場合は、タスク一覧には表示されませんのでタスク一覧からの復帰は不可能ですが、ホーム画面やランチャーからアプリAのアイコンをタップすることで復帰することが可能です 2の場合は、他のアプリ起動を間に挟まない場合はアプリA(画面遷移や何か入力) → ホーム画面 → アプリAをホーム画面からアプリアイコンタップで起動することでアプリAの画面遷移や入力状態は保持された状態で復帰できます
jimbe

2024/12/12 03:24

すいません、あまり深く考えてのことではないのですが >アプリAで作業途中に別アプリを起動させるとアプリAで作業途中の状態に復帰できない ということに対してです。 間で別アプリを起動するかどうかで復帰出来る出来ないが違うということですが、つまり最後に起動したアプリは(まだ?)"完全な履歴扱いでは無い"という感じなのかもしれません。 何かを知っているわけでも調べたわけでもありませんが、システムの"履歴"を使わないなら、アプリ自身で状態を保存・復帰する処理を行えば良いのではないでしょうか。
Elspeth

2024/12/12 05:05

回答いただきありがとうございます! > 何かを知っているわけでも調べたわけでもありませんが、システムの"履歴"を使わないなら、アプリ自身で状態を保存・復帰する処理を行えば良いのではないでしょうか。 私も最終手段は上記しか無いな、と考えておりました、、、; 状態を戻すとなると、ファイルなどに画面遷移履歴や各画面の状態を全て記録しておき、次回のアプリA起動時に画面遷移履歴を付け直しながら各画面の状態も戻して(戻すタイミングは各画面が表示されるときで良いと思いますが)と結構大変なので私の知らない裏技が無いかなと思いこちらへ質問させていただきました(今回のアプリAは質問用に2画面と画面内もシンプルなのですが、もっと複雑なアプリを想定しております) 通常のAndroidアプリと違うことをやろうとするなら自分で面倒見なさいよ、というのはその通りだと思います、がその前にちょっと悪あがきしている状態ですorz
jimbe

2024/12/12 06:09

実はこんな設定が…とかあると助かりますよね^^; チラッと英単語で検索してみましたが多分絞り込みが足りないのかそれらしい記事は当たりませんでした。お力になれず…。
Elspeth

2024/12/12 06:27

> 実はこんな設定が…とかあると助かりますよね^^; そうですね、、、何かあると嬉しいです、、、 > お力になれず…。 いえいえ、私の質問に貴重なお時間を割いていただきありがとうございます!
guest

回答1

0

自己解決

良い解決策は無さそうなので以下のどちらにするか検討します

  1. 今のまま、タスク一覧に表示しない → 他のアプリを起動した際に、アプリAがキルされることを前提にアプリを考える
  2. タスク一覧に表示する → タスク一覧から起動された際にどうするかを検討する

投稿2024/12/18 02:03

編集2024/12/18 02:04
Elspeth

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問