Androidの各webブラウザアプリの挙動調査


androidのwebブラウザアプリからリンクタッチで自アプリを起動するときに、各webブラウザアプリがintentにどのようなフラグを付けているか調べた

背景

自アプリから自webページをwebブラウザアプリを起動して閲覧
→ webブラウザアプリで色々やって最終的に自webページ上のリンクをタッチ
→ そのリンクを自アプリのActivityに設定したintentfilterを用いて拾ってやり、自アプリのActivityを起動
ということをするにあたってActivityのlaunchModeなどを決めるため各webブラウザアプリの挙動を知りたくなった。

調べたもの

Huawei nova3 (android 9) :

  • chrome
  • FireFox

Fujitsu F-05J (android 7.1.1) :

  • chrome
  • FireFox
  • プリインストールブラウザアプリ

SONY SO-02E(android 4.4.2) :

  • chrome
  • プリインストールブラウザアプリ

結果

chrome : 3端末とも FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP
FireFox : 2端末ともフラグ無し
プリインストールブラウザアプリ : 2端末ともフラグ無し

  • chrome以外はフラグ無し。
  • ユーザーがchromeで開いてもそれ以外のアプリで開いても同じ挙動になるようにするにはintentfilterを付けるActivityのlaunchModeをsinglesingle taskにしたらよさそう。それでもchromeはFLAG_ACTIVITY_CLEAR_TOPも使用しているので完全に同じ動きにはならないけど…

調べ方

  • 最初はテスト用に、自アプリ→webアプリ→自アプリという動きをするアプリを作って、端末にインストールし、各webアプリごと・各launch modeごとに、webから自アプリに戻ってきた後に端末の戻るボタンを押してどういう挙動をするかということを地道に調べた。その結果をもとに推理した。(すごく時間がかかった)

  • その後、システムがLogcatにintentが飛ばされた時にどのフラグが使われているか見れるログを出しているということを聞き、再度調べてみた。

裏話

テストアプリで調べて推理した結果では実は

  • chromeはFLAG_ACTIVITY_NEW_TASKを使用している
  • それ以外のアプリはフラグを使用していない

という結論になっていたのだが、実はchromeはFLAG_ACTIVITY_CLEAR_TOPフラグも使用していることが発覚した。
Logcatで調べる方が簡単だし得られる結果が正確だった。

感想

Logcatで意外に色々情報が見れる事があるみたいなので、今後何か疑問に思った時に調査のためにテストアプリを作って時間をかけたりする前に一度Logcatをじっと眺めてほしい情報が落ちていないか確認していきたい。