【アプリ不要】Androidで同じアプリを複数起動する方法

#Android#HowTo#解説
投稿日: 更新日:

はじめに

この記事では、特別なアプリをインストールせずに「Androidスマホで同じアプリを複数個起動する方法(マルチインスタンス)」について説明します。

ネットのほとんどの記事で紹介されている方法は、専用アプリのインストールが必須です。しかし、この記事で紹介する方法では、専用アプリのインストールやルート化(脱獄)は一切不要です。

同じアプリを複数個起動するとは、つまり、こういうことです。

電卓アプリが2つ起動している

動作確認環境

この記事は、次のような環境で検証しています。スマホの機種やAndroidのバージョンによって、挙動や操作方法が多少異なります。

機種1

機種2

手順

ここでは、電卓アプリを2つ起動するシーンを例に手順を紹介しますが、他のアプリでも同様の手順が使えます。

1. 目的のアプリを起動する

まずは、普通に目的のアプリを起動します。

電卓アプリを起動したようす

2. アプリを強制停止する

アプリ切り替え画面(マルチタスク画面)に移動し、アプリのアイコンをタップ(または長押し)します。

メニューが開くので、[アプリ情報]や[i]マークを選択します。

メニューを表示

開いた画面で、[強制停止]をタップします。

アプリ情報のスクリーンショット

警告が表示されますが、[OK]をタップして続行します。このとき、対象のアプリで保存していないデータは失われますので、必ず保存してから[OK]をタップしてください。

強制停止についての警告

3. 分割画面で別のアプリを起動する

強制停止したら、別のアプリで分割画面を利用します。

ここでは先ほどの設定アプリを使いますが、複数個起動したいアプリ以外で画面分割に対応しているアプリなら、何でも構いません。

画面下部に[分割画面]というボタンが表示されない場合は、アプリアイコンをタップして表示されるメニューからも実行できます。

分割画面ボタン

4. 分割画面で対象のアプリを起動する

分割画面のもう1つのアプリとして、複数個起動したいアプリを選択します。

このとき、アプリ切り替え画面からではなく、必ずアプリアイコンから起動してください

分割画面で表示したようす

画面分割を終了し、アプリ切り替え画面に戻ると、対象のアプリが2つ起動しているのを確認できます。

電卓アプリが2つ起動している

もちろん、これらの画面分割もできます。また、ここまでの手順を繰り返せば、同じアプリを3つ以上起動できます。

2つの電卓アプリで分割画面を利用したようす

おまけ

なぜ、この方法で、同じアプリを複数個開けるのでしょうか。

私は趣味でプログラミングをしていますが、Androidの内部処理は把握していないので、挙動からの推測です。

専門用語を使った、プログラマー向けの説明はこちら
Androidは、「アプリアイコンをタップしたらアプリを起動する。ただし、すでにインスタンスが存在する場合は、新規のインスタンスを作成せずに既存のインスタンスを表示する」という挙動です。

この、インスタンスの存在確認の処理にバグがあると思われます。

挙動から推察すると、「アプリ切り替え画面にアプリが表示されているか」ではなく「プロセスが走っているか」で、インスタンスの存在を確認しているようです。

そのため、アプリを強制停止すると、プロセスがkillされるため「インスタンスは存在していない」と判定され、新規インスタンスが作成されます。

しかしながら、実際にはアプリ切り替え画面に表示されているためインスタンスはすでに存在しており、結果として複数のインスタンスが作成されるようです。

当然、この挙動に対しての対策が取られているはずですが、その対策は分割画面を想定していないようです。

こうして、同じアプリが複数個起動されるというわけです。


Androidは、「アプリアイコンをタップされたらアプリを起動する。ただし、すでに起動している場合は、新規で起動せずにアプリ画面を切り替える」という挙動です。

アプリアイコンをタップすると、「アプリがすでに起動しているか」という判定が入る訳です。この判定処理にバグがあると思われます。

アプリを強制停止すると、アプリ切り替え画面に表示されていたとしても、アプリのプログラムが走っていない状態になります。すると、Androidが「アプリをまだ起動していない」と勘違いし、新規で起動してしまいます。

当然、この挙動に対しての対策が取られているはずですが、その対策は分割画面を想定していないようです。

こうして、同じアプリが複数個起動されるというわけです。

Xに共有する Blueskyに共有する Misskeyに共有する LINEに共有する Threadsに共有する
著者のアイコン画像

生まれた時から、母国語よりも先にJavaScriptを使っていました。ネットの海のどこにもいなくてどこにでもいます。

Webフロントエンドプログラマーで、テクノロジーに関する話題を追いかけています。動画編集やプログラミングが趣味で、たまにデザインなどもやっています。主にTypeScriptを使用したWebフロントエンド開発を専門とし、便利で実用的なブラウザー拡張機能を作成しています。また、個人ブログを通じて、IT関連のニュースやハウツー、技術的なプログラミング情報を発信しています。