(57)【特許請求の範囲】
【請求項１】
情報処理装置におけるタスクの起動時点を推定するシステムであって、
少なくとも２つの測定時点について、前記測定時点までに起動された前記タスクについて、起動時点の新しい順に重複なく所定数以下の前記タスクを抽出して前記起動時点の順に並べた起動リストを記憶する起動リスト記憶部と、
前記起動リスト記憶部から、第１の前記測定時点に対応する第１の前記起動リストおよび前記第１の測定時点よりも後の第２の前記測定時点に対応する第２の前記起動リストを読み出す起動リスト取得部と、
前記第２の起動リストに含まれる前記タスクのうち、前記第２の起動リストにおける最古の前記タスクからあるタスク（Ｚ）までの全ての前記タスクが前記第２の起動リストにおける先後関係と同じ先後関係で前記第１の起動リストに含まれているという条件を満たす最新のタスク（Ｚ）を、最終起動タスクとして特定する最終起動タスク特定部と、
前記第２の起動リストにおいて前記最終起動タスクよりも新しい前記タスクの前記起動時点を、前記第１の測定時点から前記第２の測定時点までの間と推定する起動時点推定部と、
を備えることを特徴とする起動時点推定システム。
【請求項２】
請求項１に記載の起動時点推定システムであって、
前記情報処理装置において実行されるフレームワークにより提供される前記起動リストを取得するためのＡＰＩを、所定の時間間隔でコールすることにより前記起動リストを取得し、取得した前記起動リストを現時点に対応付けて前記起動リスト記憶部に登録する起動リスト取得部をさらに備えること、
を特徴とする起動時点推定システム。
【請求項３】
請求項１または２に記載の起動時点推定システムであって、
前記最終起動タスク特定部は、前記第２の起動リストにおいて、最古のタスク（イ）が前記第２の起動リストに含まれているか否かを判定し、含まれている場合には、つぎに新しいタスク（ロ）が前記第１の起動リストにおいて前記タスク（イ）より新しい位置に含まれているという条件を満たすか否かを判定し、前記条件を満たす場合には、つぎに新しいタスク（ハ）が前記第１の起動リストにおいて前記タスク（ロ）より新しい位置に含まれているという条件を満たすか否かを判定する、という処理を順次新しい側に向けて実行し、前記条件を満たす前記第２の起動リストにおけるタスク（Ｘ）のつぎに新しいタスク（Ｙ）が前記条件を満たさない場合に、前記タスク（Ｘ）を前記最終起動タスクと特定すること、
を特徴とする起動時点推定システム。
【請求項４】
請求項３に記載の起動時点推定システムであって、
前記起動時点推定部は、前記第２の起動リストの最古の前記タスクが前記第１の起動リストに含まれていない場合は、前記第２の起動リストに含まれているすべての前記タスクの前記起動時点を前記第１の測定時点から前記第２の測定時点までの間と推定すること、
を特徴とする起動時点推定システム。
【請求項５】
請求項３または４に記載の起動時点推定システムであって、
前記起動時点推定部は、前記第２の起動リストの最新の前記タスクが前記最終起動タスクと特定された場合に、前記第１および第２の起動リストが一致しないときは、前記第２の起動リストに含まれているすべての前記タスクの前記起動時点を前記第１の測定時点から前記第２の測定時点までの間と推定すること、
を特徴とする起動時点推定システム。
【請求項６】
請求項３ないし５のいずれか１項に記載の起動時点推定システムであって、
前記起動時点推定部は、前記第１の起動リストにおいて、前記第２の起動リストの最古の前記タスクおよび前記最終起動タスクの間に含まれている前記タスクの少なくともいずれかが、前記第２の起動リストにおいて前記最終起動タスクよりも新しい位置に含まれていない場合には、前記第２の起動リストに含まれているすべての前記タスクの前記起動時点を前記第１の測定時点から前記第２の測定時点までの間と推定すること、
を特徴とする起動時点推定システム。
【請求項７】
請求項１に記載の起動時点推定システムであって、
前記最終起動タスク特定部は、前記第１および第２の起動リストの複製である第１および第２の作業リストを生成し、前記第１および第２の作業リストが新しい順に前記第２の作業リストの長さ分一致するまで、前記第２の作業リストの最新の前記タスクを前記第１および第２の作業リストから削除していき、前記第１および第２の作業リストが新しい順に前記第２の作業リストの長さ分一致した場合に、前記第２の作業リストの最新の前記タスクを前記最終起動タスクと特定すること、
を特徴とする起動時点推定システム。
【請求項８】
請求項１ないし７のいずれか１項に記載の起動時点推定システムであって、
前記情報処理装置およびサーバーを含んで構成され、
前記情報処理装置が、前記起動リスト記憶部、前記最終起動タスク特定部、および前記起動時点推定部を備え、
前記情報処理装置はさらに、前記第１の測定時点から前記第２の測定時点までの期間を示す起動時点情報に対応付けて、当該期間に起動されたと推定された前記タスクを記憶する起動時点記憶部と、前記起動時点記憶部に記憶されている前記起動時点情報および前記タスクを前記サーバーに送信する起動時点送信部とを備え、
前記サーバーは、前記起動時点情報および前記タスクを受信する起動時点受信部と、受信した前記起動時点情報およびタスクを対応付けて記憶する起動時点記憶部と、を備えること、
を特徴とする起動時点推定システム。
【請求項９】
請求項１ないし７のいずれか１項に記載の起動時点推定システムであって、
前記情報処理装置と通信可能に接続され、
前記情報処理装置から定期的に送信される、前記測定時点の付帯された前記起動リストを受信し、受信した前記起動リストを前記起動リスト記憶部に登録する起動リスト受信部を備えること、
を特徴とする起動時点推定システム。
【請求項１０】
情報処理装置におけるタスクの起動時点を推定する方法であって、
少なくとも２つの測定時点について、前記測定時点までに起動された前記タスクについて、起動時点の新しい順に重複なく所定数以下の前記タスクを抽出して前記起動時点の順に並べた起動リストを記憶するコンピューターが、
前記起動リスト記憶部から、第１の前記測定時点に対応する第１の前記起動リストおよび前記第１の測定時点よりも後の第２の前記測定時点に対応する第２の前記起動リストを読み出し、
前記第２の起動リストに含まれる前記タスクのうち、前記第２の起動リストにおける最古の前記タスクからあるタスク（Ｚ）までの全ての前記タスクが前記第２の起動リストにおける先後関係と同じ先後関係で前記第１の起動リストに含まれているという条件を満たす最新のタスク（Ｚ）を、最終起動タスクとして特定し、
前記第２の起動リストにおいて前記最終起動タスクよりも新しい前記タスクの前記起動時点を、前記第１の測定時点から前記第２の測定時点までの間と推定すること、
を特徴とする起動時点推定方法。
【請求項１１】
情報処理装置におけるタスクの起動時点を推定するためのプログラムであって、
少なくとも２つの測定時点について、前記測定時点までに起動された前記タスクについて、起動時点の新しい順に重複なく所定数以下の前記タスクを抽出して前記起動時点の順に並べた起動リストを記憶するコンピューターに、
前記起動リスト記憶部から、第１の前記測定時点に対応する第１の前記起動リストおよび前記第１の測定時点よりも後の第２の前記測定時点に対応する第２の前記起動リストを読み出すステップと、
前記第２の起動リストに含まれる前記タスクのうち、前記第２の起動リストにおける最古の前記タスクからあるタスク（Ｚ）までの全ての前記タスクが前記第２の起動リストにおける先後関係と同じ先後関係で前記第１の起動リストに含まれているという条件を満たす最新のタスク（Ｚ）を、最終起動タスクとして特定するステップと、
前記第２の起動リストにおいて前記最終起動タスクよりも新しい前記タスクの前記起動時点を、前記第１の測定時点から前記第２の測定時点までの間と推定するステップと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、タスクの起動時点を推定するシステム、方法およびプログラムに関する。
【背景技術】
【０００２】
グーグル社が提供するアンドロイド（登録商標）と称するプラットフォームを利用した携帯電話機、スマートフォン、タブレットコンピューター、情報処理機能を有するテレビなどのコンピューター（以下、アンドロイド端末という。）向けの多種多様なアプリケーションプログラム（以下、単にアプリと略記する。）がすでに数多く存在しており、これからも多くのアプリが開発されて利用可能となるであろう。アンドロイド端末の利用者は関心のあるいくつものアプリを自分の端末にインストールしておき、随時に必要なアプリを起動して活用している。
【０００３】
情報通信分野でビジネス活動をするものにとって、膨大な数のアンドロイド端末ユーザーがどのようなアプリに関心を示してどのように活用しているのかという情報は、たとえばテレビ放送業界における視聴率情報と同様に、きわめて有用なマーケティング情報となり得るものと認識され、そうした整理された情報に対する需要はきわめて大きい。たとえば、個々のアンドロイド端末ユーザーのアプリ活用情報に基づいて、個々のユーザーの関心事に適合した広告を配信するなど、多数のユーザーに関する個別のアプリ活用情報はさまざまなビジネスにとってきわめて有意義なものである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３３１７７０５号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１では、一般ユーザーのパソコンにバックグランドで動作する情報採取プログラムを組み込み、この情報採取プログラムにより当該パソコンのユーザーによる利用状況を表す時系列データを記録する構成とし、多数のパソコンでそれぞれ記録された利用状況データを、通信網を介して中央処理ステーションに収集している。収集した各パソコンの利用状況データをデータベース管理システムにより整理することで有意義な情報を得ることができる。各パソコンで記録する利用状況データの中には、パソコンで実行されたアプリケーションプログラムの開始・終了を記録したデータが含まれる。
【課題を解決するための手段】
【０００６】
上記課題を解決するための本発明の主たる発明は、情報処理装置におけるタスクの起動時点を推定するシステムであって、少なくとも２つの測定時点について、前記測定時点までに起動された前記タスクについて、起動時点の新しい順に重複なく所定数以下の前記タスクを抽出して前記起動時点の順に並べた起動リストを記憶する起動リスト記憶部と、前記起動リスト記憶部から、第１の前記測定時点に対応する第１の前記起動リストおよび前記第１の測定時点よりも後の第２の前記測定時点に対応する第２の前記起動リストを読み出す起動リスト取得部と、前記第２の起動リストに含まれる前記タスクのうち、前記第２の起動リストにおける最古の前記タスクから当該タスクまでの全ての前記タスクが、前記第２の起動リストにおける先後関係と同じ先後関係で前記第１の起動リストに含まれるもののなかで、最新の前記タスクである最終起動タスクを特定する最終起動タスク特定部と、前記第２の起動リストにおいて前記最終起動タスクよりも新しい前記タスクの前記起動時点を、前記第１の測定時点から前記第２の測定時点までの間と推定する起動時点推定部と、を備えることとする。
【０００７】
また、本発明の起動時点推定システムは、前記情報処理装置において実行されるフレームワークにより提供される前記起動リストを取得するためのＡＰＩを、所定の時間間隔でコールすることにより前記起動リストを取得し、取得した前記起動リストを現時点に対応付けて前記起動リスト記憶部に登録する起動リスト取得部をさらに備えるようにしてもよい。
【０００８】
また、本発明の起動時点推定システムでは、前記最終起動タスク特定部は、前記第２の起動リストの最古の前記タスクから最先の前記タスクに向けて順に、当該タスクである第１のタスクよりも１つ新しい第２の前記タスクが前記第１の起動リストにも含まれており、かつ、前記第２のタスクが前記第１の起動リストにおいても前記第１のタスクよりも新しい位置に含まれているかを判定していき、前記第２のタスクが前記第２の起動リストに含まれていない場合、または、前記第２のタスクが前記第１の起動リストにおいて前記第１のタスクよりも古い位置に含まれていた場合に、前記第１のタスクを前記最終起動タスクと特定するようにしてもよい。
【０００９】
また、本発明の起動時点推定システムでは、前記起動時点推定部は、前記第２の起動リストの最古の前記タスクが前記第１の起動リストに含まれていない場合は、前記第２の起動リストに含まれているすべての前記タスクの前記起動時点を前記第１の測定時点から前記第２の測定時点までの間と推定するようにしてもよい。
【００１０】
また、本発明の起動時点推定システムでは、前記起動時点推定部は、前記第２の起動リストの最新の前記タスクが前記最終起動タスクと特定された場合に、前記第１および第２の起動リストが一致しないときは、前記第２の起動リストに含まれているすべての前記タスクの前記起動時点を前記第１の測定時点から前記第２の測定時点までの間と推定するようにしてもよい。
【００１１】
また、本発明の起動時点推定システムでは、前記起動時点推定部は、前記第１の起動リストにおいて、前記第２の起動リストの最古の前記タスクおよび前記最終起動タスクの間に含まれている前記タスクの少なくともいずれかが、前記第２の起動リストにおいて前記最終起動タスクよりも新しい位置に含まれていない場合には、前記第２の起動リストに含まれているすべての前記タスクの前記起動時点を前記第１の測定時点から前記第２の測定時点までの間と推定するようにしてもよい。
【００１２】
また、本発明の起動時点推定システムでは、前記最終起動タスク特定部は、前記第１および第２の起動リストの複製である第１および第２の作業リストを生成し、前記第１および第２の作業リストが新しい順に前記第２の作業リストの長さ分一致するまで、前記第２の作業リストの最新の前記タスクを前記第１および第２の作業リストから削除していき、前記第１および第２の作業リストが新しい順に前記第２の作業リストの長さ分一致した場合に、前記第２の作業リストの最新の前記タスクを前記最終起動タスクと特定するようにしてもよい。
【００１３】
また、本発明の起動時点推定システムは、前記情報処理装置およびサーバーを含んで構成され、前記情報処理装置が、前記起動リスト記憶部、前記最終起動タスク特定部、および前記起動時点推定部を備え、前記情報処理装置はさらに、前記第１の測定時点から前記第２の測定時点までの期間を示す起動時点情報に対応付けて、当該期間に起動されたと推定された前記タスクを記憶する起動時点記憶部と、前記起動時点記憶部に記憶されている前記起動時点情報および前記タスクを前記サーバーに送信する起動時点送信部とを備え、前記サーバーは、前記起動時点情報および前記タスクを受信する起動時点受信部と、受信した前記起動時点情報およびタスクを対応付けて記憶する起動時点記憶部と、を備えるようにしてもよい。
【００１４】
また、本発明の起動時点推定システムは、前記情報処理装置と通信可能に接続され、前記情報処理装置から定期的に送信される、前記測定時点の付帯された前記起動リストを受信し、受信した前記起動リストを前記起動リスト記憶部に登録する起動リスト受信部を備えるようにしてもよい。
【００１５】
また、本発明の他の態様は、情報処理装置におけるタスクの起動時点を推定する方法であって、少なくとも２つの測定時点について、前記測定時点までに起動された前記タスクについて、起動時点の新しい順に重複なく所定数以下の前記タスクを抽出して前記起動時点の順に並べた起動リストを記憶するコンピューターが、前記起動リスト記憶部から、第１の前記測定時点に対応する第１の前記起動リストおよび前記第１の測定時点よりも後の第２の前記測定時点に対応する第２の前記起動リストを読み出し、前記第２の起動リストに含まれる前記タスクのうち、前記第２の起動リストにおける最古の前記タスクから当該タスクまでの全ての前記タスクが、前記第２の起動リストにおける先後関係と同じ先後関係で前記第１の起動リストに含まれるもののなかで、最新の前記タスクである最終起動タスクを特定し、前記第２の起動リストにおいて前記最終起動タスクよりも新しい前記タスクの前記起動時点を、前記第１の測定時点から前記第２の測定時点までの間と推定することとする。
【００１６】
また、本発明の他の態様は、情報処理装置におけるタスクの起動時点を推定するためのプログラムであって、少なくとも２つの測定時点について、前記測定時点までに起動された前記タスクについて、起動時点の新しい順に重複なく所定数以下の前記タスクを抽出して前記起動時点の順に並べた起動リストを記憶するコンピューターに、前記起動リスト記憶部から、第１の前記測定時点に対応する第１の前記起動リストおよび前記第１の測定時点よりも後の第２の前記測定時点に対応する第２の前記起動リストを読み出すステップと、前記第２の起動リストに含まれる前記タスクのうち、前記第２の起動リストにおける最古の前記タスクから当該タスクまでの全ての前記タスクが、前記第２の起動リストにおける先後関係と同じ先後関係で前記第１の起動リストに含まれるもののなかで、最新の前記タスクである最終起動タスクを特定するステップと、前記第２の起動リストにおいて前記最終起動タスクよりも新しい前記タスクの前記起動時点を、前記第１の測定時点から前記第２の測定時点までの間と推定するステップと、を実行させることとする。
【００１７】
その他本願が開示する課題やその解決方法については、発明の実施形態の欄及び図面により明らかにされる。
【発明の効果】
【００１８】
本発明によれば、情報処理装置において起動されたタスクの起動時点を推定することができる。
【図面の簡単な説明】
【００１９】
【図１】アンドロイド端末における起動アプリの時系列の変化と、起動アプリ通知ＡＰＩのコールと、最新起動アプリリストの具体的な関係を示す図である。
【図２】起動アプリ調査システムの構成例を示す図である。
【図３】アンドロイド端末１０のハードウェア構成例を示す図である。
【図４】アンドロイド端末１０のソフトウェア構成例を示す図である。
【図５】起動リスト記憶部１２５の構成例を示す図である。
【図６】起動ログ記憶部１２６の構成例を示す図である。
【図７】サーバー２０のハードウェア構成例を示す図である。
【図８】サーバー２０のソフトウェア構成例を示す図である。
【図９】起動ログ記憶部２１２の構成例を示す図である。
【図１０】この発明の第１実施形態による処理手順を示す図である。
【図１１】この発明の第２実施形態による処理手順を示す図である。
【図１２】第２実施形態による処理手順における最新起動アプリリストの状態を説明する図である。
【図１３】この発明の第３実施形態による処理手順を示す図である。
【図１４】第３実施形態による処理手順を説明するための図である。
【発明を実施するための形態】
【００２０】
本発明の一実施形態に係る起動アプリ調査システムは、アンドロイド端末において、いつどのタスクが実行されたのか、すなわちいつどのアプリが実行されたのかを調査するものである。
【００２１】
＝＝＝「起動アプリ通知ＡＰＩ」と「最新起動アプリリスト」＝＝＝
この出願の発明者は、アンドロイドで提供される仮想機械（Virtual Machine；アンドロイドＯＳと呼ばれる。）上で動作するアプリとしての情報採取プログラムをアンドロイド端末に組み込んでおいて適時に動作させ、アンドロイドＯＳのＡＰＩ（Ａpplication Ｐrogram Ｉnterface）を通じて起動アプリ情報を取得することで、当該アンドロイド端末においていつどのアプリが実行されたのかを表す情報（以下、アプリ起動時系列情報という。）を取得する仕組みを開発しようと考えた。  
まず発明者は、上記の目的に利用可能なアンドロイドＯＳのＡＰＩを調べた。アンドロイドＯＳのＡＰＩには「getＲecentＴasks」と称される機能が定義されている。これは、アンドロイドＯＳが最近起動したいくつかのタスク（アンドロイドＯＳではアプリと同義である。）のリストを知らせてくれるＡＰＩ機能である。このＡＰＩ機能のことを、この出願においては、「起動アプリ通知ＡＰＩ」と称することとする。また、「起動アプリ通知ＡＰＩ」が出力するアプリ識別子のリストのことを、「最新起動アプリリスト」と称することとする。
【００２２】
＝＝＝「起動アプリ通知ＡＰＩ」のアルゴリズム＝＝＝
起動アプリ通知ＡＰＩは、以下の規則に従って、最新起動アプリリストを生成して当該ＡＰＩをコールしたアプリ（情報採取プログラム）に出力する。  
（ａ）直近に起動されたアプリの識別子がリストの先頭に配置され、それに続けて、１つ前に起動されたアプリ識別子、さらに１つ前に起動されたアプリ識別子、・・・の順番で配列され、リスト中のアプリ識別子の数は設定された上限数ｍを超えない。上限数ｍは、通常２０個程度に設定されている。  
（ｂ）同一のアプリ識別子がリスト中に重複して存在することはない。上限数ｍを２０個とすると、最近起動された２０個のアプリ識別子の順列中に同一アプリ識別子が２個存在する場合、起動時期の新しい方のアプリ識別子を残し、古い方のアプリ識別子を２０個の順列から除き、代わりに新しい順で２１番目のアプリ識別子を加えて２０個の順列を作成し、それを最新起動アプリリストとして出力する。なお、この２１番目のアプリ識別子がそれより新しいアプリ識別子と重複する場合は、２２番目のアプリ識別子が２０個のリストの候補となる。
【００２３】
＝＝＝「最新起動アプリリスト」の具体例＝＝＝
図１の最上部に示しているのは、アンドロイド端末において、時間の経過に沿って、時点１でアプリＡが起動され、時点２でアプリＢが起動され、時点３でアプリＣが起動され、・・・というアプリ起動の時系列の変遷である。以下においては、簡明な説明とすることを目的とし、上記の上限数ｍを８個として最新起動アプリリストの具体例を説明する。  
図１において、時点５〜６間で起動アプリ通知ＡＰＩがコールされると、最新起動アプリリストとして「Ｅ，Ｄ，Ｃ，Ｂ，Ａ」が出力される。時点１０〜１１間でのコール２に対しては最新起動アプリリスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」が出力され、時点１３〜１４間のコール３に対しては最新起動アプリリスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」が出力され、時点１４〜１５間のコール４に対しては最新起動アプリリスト「Ｈ，Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｆ，Ｅ」が出力される。以下同様に、図１に示したコール５およびコール６に対する応答も含め、上述したアルゴリズムに従って作成された最新起動アプリリストが出力される。
【００２４】
＝＝＝アプリ起動時系列情報を得る第１の方法＝＝＝
アンドロイドでは、ユーザーが２つのアプリを連続的に起動する場合でも、最初に起動したアプリを停止した後でなければ次のアプリを起動することができないため、数秒の間隔が置かれる。  
そこで、情報採取プログラムにより、たとえば１秒間隔で起動アプリ通知ＡＰＩをコールし、１秒間隔で最新起動アプリリストを取得し、最新の取得リストの先頭（直近に起動されたアプリ）と１回前の取得リストの先頭とを１秒間隔で比較し続けることにより、１秒単位でどのアプリが起動されたのかを表す起動アプリ時系列情報を得ることができる。
【００２５】
＝＝＝アプリ起動時系列情報を得る第２の方法＝＝＝
たとえばアプリの起動時刻をマーケティングに用いようとする場合などでは、起動アプリの起動時点の精度は秒単位でなくてもよく、３０秒単位や１分単位あるいは１時間単位であれば十分なこともある。  
しかし、さきに図１を用いて具体的に説明したように、アンドロイドＯＳの起動アプリ通知ＡＰＩのアルゴリズムでは、これをコールする間隔をある程度大きくすると、相前後する２回分の最新起動アプリリストを単純に対比するだけでは、正確な起動アプリ時系列情報を抽出することができなくなる可能性が高くなる。  
そこで、本実施形態では、相前後する２回分の最新起動アプリリストを対比する方法を工夫することで、起動アプリ通知ＡＰＩのコール間隔を大きくしても、２回のコールの間に実行されたアプリを高い精度で抽出することができるようにしている。
【００２６】
＝＝＝本実施形態における処理方法＝＝＝
本実施形態では、つぎの事項１〜５により特定されるコンピューター情報処理の方法を説明する。  
１．第１〜第３プロセスを含んだコンピューター情報処理によりアンドロイド端末における起動アプリの時系列情報を調査する方法であること
２．第１プロセスでは、アンドロイド端末に実装された情報採取プログラムによりアンドロイドＯＳの起動アプリ通知ＡＰＩを平均３０秒以上の間隔をおいて繰り返しコールし、各コール時の最新起動アプリリストを取得し、当該リストをコール時の時間情報とともに記録すること
３．第２プロセスでは、ｎ回目コール時の最新起動アプリリストＲ（ｎ）と、（ｎ−１）回目コール時の最新起動アプリリストＲ（ｎ−１）とを対比し、リストＲ（ｎ）中の最古のアプリ識別子ＩＤ１からｉ個目のアプリ識別子ＩＤｉまでの順列がリストＲ（ｎ−１）と整合する整合順列であると判断すること
４．整合順列とは、リストＲ（ｎ）におけるアプリ識別子ＩＤ１〜ＩＤｉのすべてがリストＲ（ｎ−１）に存在し、かつ、アプリ識別子ＩＤ１〜ＩＤｉの配列順番がリストＲ（ｎ−１）におけるアプリ識別子ＩＤ１〜ＩＤｉの相対的な配列順番と同じである順列であること
５．第３プロセスでは、前記数値ｉが設定値ｊ以上である場合に、リストＲ（ｎ）における（ｉ＋１）番目のアプリ識別子ＩＤ（ｉ＋１）から最新のアプリ識別子ＩＤｍまでの順列をｎ回目コール時から（ｎ−１）回目コール時までの期間に起動された順列として記録すること
【００２７】
＝＝＝システム構成＝＝＝
図２は起動アプリ調査システムの構成例を示す図である。起動アプリ調査システムは、アンドロイド端末１０と、アンドロイド端末１０において起動されるアプリの起動時点を管理するサーバー２０を含んで構成される。なお、アンドロイド端末１０は複数存在していてもよい。アンドロイド端末１０及びサーバー２０は通信ネットワーク３０を介して互いに通信可能に接続されている。通信ネットワーク３０は、例えば公衆電話回線網、携帯電話回線網、無線通信網、イーサネットなどにより構築されるインターネット、ＬＡＮ（Local Area Network）、ＶＡＮ（Value Added Network）などである。第１実施形態では、通信ネットワーク３０はインターネットを想定している。サーバー２０は、例えばパーソナルコンピューター、ワークステーションなどのコンピューターである。なお、サーバー２０は１台または複数台のコンピューターにより構成されるクラウドとして実現するようにしてもよい。
【００２８】
＝＝＝アンドロイド端末１０＝＝＝
図３はアンドロイド端末１０のハードウェア構成例を示す図である。アンドロイド端末１０は、ＣＰＵ１０１、メモリ１０２、記憶装置１０３、通信モジュール１０４、タッチパネルディスプレイ１０５、ボタン１０６、マイク１０７、スピーカー１０８を備える。記憶装置１０３は、システムプログラム１１、情報採取プログラム１２などのプログラムや各種のデータを記憶する、例えばフラッシュメモリ、ソリッドステートドライブ、ハードディスクドライブなどである。ＣＰＵ１０１は記憶装置１０３に記憶されているプログラムをメモリ１０２に読み出して実行することにより各種の機能を実現する。通信モジュール１０４は、通信ネットワーク３０に接続するためのモジュールであり、例えばイーサネット（登録商標）に接続するためのアダプタ、公衆電話回線網に接続するためのモデム、無線通信を行うための無線通信機などである。タッチパネルディスプレイ１０５、ボタン１０６、マイク１０７およびスピーカー１０８は、アンドロイド端末１０のユーザーからデータの入力を受け付け、またユーザーに対してデータを出力する。
【００２９】
図４はアンドロイド端末１０のソフトウェア構成例を示す図である。アンドロイド端末１０は、アンドロイド（登録商標）１１１および情報採取部１２１を備える。ＣＰＵ１０１がシステムプログラム１１を実行することによりアンドロイド（登録商標）１１１が実現され、ＣＰＵ１０１が情報採取プログラム１２を実行することにより情報採取部１２１が実現される。もちろん、情報採取部１２１を実現するためのプログラムを共有ライブラリやフレームワークとして提供し、これらを情報採取以外の目的をもったユーザープログラムから呼び出すようにすることもできる。
【００３０】
情報採取部１２１は、起動アプリ通知ＡＰＩを介してアンドロイド１１１から最新起動アプリリストを取得し、アプリの起動時点を推定し、推定したアプリの起動時点をサーバー２０に送信する。情報採取部１２１は、最新起動アプリリスト取得部１２２、起動時点推定部１２３、起動ログ送信部１２４、起動リスト記憶部１２５、起動ログ記憶部１２６を備える。
【００３１】
起動リスト記憶部１２５は最新起動アプリリストを記憶する。図５は起動リスト記憶部１２５の構成例を示す図である。起動リスト記憶部１２５は、起動アプリ通知ＡＰＩをコールした時点を示す取得時点に対応付けて、アンドロイド１１１から取得した最新起動アプリリストを記憶する。
【００３２】
最新起動アプリリスト取得部１２２は、アンドロイド（登録商標）１１１が提供する起動アプリ通知ＡＰＩを介して最新起動アプリリストを取得する。最新起動アプリリスト取得部１２２は、定期的（たとえば３０秒や１分、５分、１時間などの任意の間隔とすることができる。）に最新起動アプリリストを繰り返し取得していくものとする。最新起動アプリリスト取得部１２２は、取得した最新起動アプリリストを、取得した時点に対応付けて起動リスト記憶部１２５に登録する。なお、最新起動アプリリスト取得部１２２は、最新から２つの最新起動アプリリストのみを残して、古い最新起動アプリリストは起動リスト記憶部１２５から削除するようにしてもよい。
【００３３】
起動ログ記憶部１２６は、アプリの起動時点の推定値（起動推定時点）を含む情報（以下、起動ログという。）を記憶する。本実施形態では起動時点の推定誤差は、最新起動アプリリスト取得部１２２が最新起動アプリリストを取得する間隔（図６の例では、１分単位を想定している。）となるため、起動推定時点は２時点間の期間として特定される。図６は起動ログ記憶部１２６の構成例を示す図である。図６の例では各行が起動ログに対応する。起動ログには、２時点間の期間に対応付けて、その２時点間に起動されたアプリを示すアプリ識別子を、起動順（起動時点が遅い順）に並べたリスト（以下、起動順列という。）が記録される。
【００３４】
起動時点推定部１２３（本発明の最終起動タスク特定部および起動時点推定部に該当する。）は、最新起動アプリリストに基づいてアプリの起動時点を推定する。起動時点推定部１２３は、時点ｎに取得した最新起動アプリリストＲ（ｎ）と、その１回前の時点ｎ−１に取得した最新起動アプリリストＲ（ｎ−１）とを比較し、Ｒ（ｎ）に含まれるアプリ識別子のうち、Ｒ（ｎ）の最古からそのアプリ識別子までのすべてのアプリ識別子がＲ（ｎ）における先後関係と同じ先後関係でＲ（ｎ−１）にも含まれているもののなかで、最新のアプリ識別子を、時点ｎ−１までに起動されたアプリの中で最後に起動されたもの（以下、最終起動アプリという。）を示す最終起動アプリ識別子として特定する。起動時点推定部１２３は、Ｒ（ｎ）において最終起動アプリ識別子よりも前（すなわち、新しい位置）に含まれるアプリ識別子に対応するアプリ（以下、新規起動アプリという。）の起動推定時点を、時点ｎ−１から時点ｎまでの間と推定する。起動時点推定部１２３は、新規起動アプリを示すアプリ識別子と起動推定時点とを含む起動ログを起動ログ記憶部１２６に登録する。なお、起動時点推定部１２３は、最新起動アプリリストが取得されるごとに、現在時点と前回の時点との間を起動推定時点として、起動ログを登録する。
【００３５】
起動ログ送信部１２４は、アプリの起動推定時点をサーバー２０に送信する。起動ログ送信部１２４は、所定の間隔（上記最新起動アプリリストを取得する間隔以上の間隔であるものとし、たとえば１時間や１日、１週間など任意の時間を指定することができる。）で起動ログ記憶部１２６に記憶されている起動ログを読み出し、読み出した起動ログと、当該アンドロイド端末１０を示す端末識別子とをサーバー２０に送信する。起動ログ送信部１２４は、サーバー２０への送信処理が成功した場合には、送信した起動ログを起動ログ記憶部１２６から削除するようにしてもよい。
【００３６】
＝＝＝サーバー２０＝＝＝
図７はサーバー２０のハードウェア構成例を示す図である。サーバー２０は、ＣＰＵ２０１、メモリ２０２、記憶装置２０３、通信インタフェース２０４、入力装置２０５、出力装置２０６を備える。記憶装置２０３は、各種のデータやプログラムを記憶する、例えばハードディスクドライブやソリッドステートドライブ、フラッシュメモリなどである。ＣＰＵ２０１は記憶装置２０３に記憶されているプログラムをメモリ２０２に読み出して実行することにより各種の機能を実現する。通信インタフェース２０４は、通信ネットワーク３０に接続するためのインタフェースであり、例えば、イーサネット（登録商標）に接続するためのアダプタ、公衆電話回線網に接続するためのモデム、無線通信網に接続するための無線通信機などである。入力装置２０５は、データの入力を受け付ける、例えばキーボードやマウス、トラックボール、タッチパネル、マイクロフォンなどである。出力装置２０６は、データを出力する、例えばディスプレイやプリンタ、スピーカーなどである。サーバー２０は複数の入力装置１０５及び出力装置１０６を備えるようにすることもできる。
【００３７】
図８はサーバー２０のソフトウェア構成例を示す図である。サーバー２０は起動ログ受信部２１１および起動ログ記憶部２１２を備える。  
起動ログ記憶部２１２はアンドロイド端末１０において起動されたアプリの起動推定時点を記憶する。図９は起動ログ記憶部２１２の構成例を示す図である。起動ログ記憶部２１２は、アンドロイド端末１０を示す端末識別子に対応付けて起動ログが記憶される。  
起動ログ受信部２１１はアンドロイド端末１０から送信される起動ログおよび端末識別子を受信し、受信した端末識別子に対応付けて起動ログを起動ログ記憶部２１２に登録する。
【００３８】
＝＝＝第１実施形態＝＝＝
第１実施形態では、前記の第１プロセスとして、情報採取プログラムによりアンドロイドＯＳの起動アプリ通知ＡＰＩを１分間隔で繰り返しコールし、各コール時の最新起動アプリリストを取得し、当該リストをコール時の時間情報とともに記録するものとする。つまり、前記情報採取プログラムが１分間隔で起動されて以下に詳述する処理を実行し、処理終了するとつぎに起動されるまでスリープ状態となる。
【００３９】
また第１実施形態では、アンドロイド端末１０に実装された前記情報採取プログラムにより前記の第２プロセスおよび第３プロセスが実行され、第３プロセスで記録された情報が当該アンドロイド端末からインターネット上のサーバー２０に送信されるものとする。
【００４０】
さきに説明したように、図１の最上部に示しているのは、あるユーザーが使用しているアンドロイド端末１０において、時間の経過に沿って、時点１でアプリＡが起動され、時点２でアプリＢが起動され、時点３でアプリＣが起動され、・・・というアプリ起動の時系列の変遷である。図１においては、起動アプリ通知ＡＰＩのコール１〜６の間隔が一定ではなくランダムに変わっている。実施例１の以下の説明では、図１のコール１〜６の間隔が１分間隔であるものと見なすことにする。
【００４１】
図１０は第１実施形態にかかる新規起動アプリの特定処理の流れを示す図である。  
起動時点推定部１２３は、最新起動アプリリスト取得部１２２が時点ｎにおいて最新起動アプリリストＲ（ｎ）を取得すると、時点ｎ−１における最新起動アプリリストＲ（ｎ−１）を起動リスト記憶部１２５から読み出し、リストＲ（ｎ）の最古（すなわちリストの最後）のアプリ識別ＩＤ（１）がリストＲ（ｎ−１）に含まれていない場合には（ステップ２１：ＮＯ）、リストＲ（ｎ）に含まれるすべてのアプリ識別子が新規起動アプリを示すものと判断する（ステップ２９）。起動時点推定部１２３は、リストＲ（ｎ）の古い順に２番目（最後から２番目）のアプリ識別子ＩＤ（２）が、リストＲ（ｎ−１）に含まれていないか、またはリストＲ（ｎ−１）において、ＩＤ（２）はＩＤ（１）よりも古い位置に含まれている場合にも（ステップ２２：ＮＯ）、リストＲ（ｎ）に含まれるすべてのアプリ識別子が新規起動アプリを示すものと特定する（ステップ２９）。
【００４２】
ＩＤ（１）およびＩＤ（２）がリストＲ（ｎ−１）に含まれており、かつ、リストＲ（ｎ−１）においてＩＤ（２）がＩＤ（１）よりも新しければ（ステップ２１：ＹＥＳ、ステップ２２：ＹＥＳ）、起動時点推定部１２３は、変数ｉに３を設定し（ステップ２３）、リストＲ（ｎ）の古い順にｉ番目のアプリ識別子ＩＤ（ｉ）がリストＲ（ｎ−１）に含まれており、かつ、リストＲ（ｎ−１）において、ＩＤ（ｉ）がＩＤ（ｉ−１）よりも新しい位置に含まれているか否かにより、ＩＤ（ｉ）が新規起動アプリではないアプリ（以下、既起動アプリという。）を示すか否かを判定する（ステップ２４）。起動時点推定部１２３は、ＩＤ（ｉ）が既起動アプリを示すと判断した場合には（ステップ２４：ＹＥＳ）、ｉがｍに一致すれば（ステップ２５：ＹＥＳ）、新規起動アプリは存在しないと判断し（ステップ２８）、ｉがｍより小さければ（ステップ２５：ＮＯ）、ｉをインクリメントして（ステップ２６）、ステップ２４からの処理を繰り返す。
【００４３】
起動時点推定部１２３は、ＩＤ（ｉ）が既起動アプリを示さないと判断した場合（ステップ２４：ＮＯ）、リストＲ（ｎ）において、古い順にｉ番目以後のアプリ識別子ＩＤ（ｉ）〜ＩＤ（ｍ）が新規起動アプリを示すものと判断する（ステップ２７）。
【００４４】
＝＝＝実施例１＝＝＝
以下に説明する第１実施形態としては、さきの説明と同様に、起動アプリ通知ＡＰＩをコールすることにより得られる最新起動アプリリストに含まれるアプリ識別子の個数の上限数ｍを８とし、また、前記発明特定事項５に記した設定数ｊを２としている。
【００４５】
以上のことを前提とする。図１の具体例では、コール２とコール３の期間において３個のアプリＫ→Ｇ→Ｌがこの順で起動されている。この発明に係る情報採取プログラムは、コール２に対する最新起動アプリリスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」と、コール３に対する最新起動アプリリスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」とを、図１０のフローチャートに示す手順で処理し、この期間の新規起動アプリの順列「Ｋ→Ｇ→Ｌ」を抽出する。
【００４６】
まず図１０のステップ２１で、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の最古のアプリ識別子「Ｅ」がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」に存在するか否かを調べる。存在するのでステップ２２に進み、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の古い方から２番目のアプリ識別子「Ｆ」がコール２リスト中に存在し、かつ、コール２リストにおいて「Ｆ」が「Ｅ」より新しい側に存在するという条件を満足するか否かを調べる。条件を満足するので、ステップ２３→２４と進む。
【００４７】
つぎの処理では、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の古い方から３番目のアプリ識別子「Ｈ」がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」中に存在し、かつ、コール２リストにおいて「Ｈ」が「Ｆ」より新しい側に存在するという条件を満足するか否かを調べる。
【００４８】
条件を満足するので、つぎに、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の古い方から４番目のアプリ識別子「Ｉ」がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」中に存在し、かつ、コール２リストにおいて「Ｉ」が「Ｈ」より新しい側に存在するという条件を満足するか否かを調べる。
【００４９】
条件を満足するので、つぎに、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の古い方から５番目のアプリ識別子「Ｊ」がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」中に存在し、かつ、コール２リストにおいて「Ｊ」が「Ｉ」より新しい側に存在するという条件を満足するか否かを調べる。
【００５０】
条件を満足するので、つぎに、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の古い方から６番目のアプリ識別子「Ｋ」がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」中に存在し、かつ、コール２リストにおいて「Ｋ」が「Ｊ」より新しい側に存在するという条件を満足するか否かを調べる。
【００５１】
６番目のアプリ識別子「Ｋ」はコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」中に存在しない。この場合、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の古い方から６番目、７番目、８番目のアプリ識別子の順列「Ｋ→Ｇ→Ｌ」を、コール２〜３間で起動されたアプリの順列としてコール２〜３の時間情報とともに記録する。
【００５２】
以上のことを整理すると、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」における古い方から５個のアプリ識別子「Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」のすべてがコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」中に存在し、かつ、アプリ識別子「Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の配列順番がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」におけるアプリ識別子「Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」の相対的な配列順番と同じになっている（配列順番の前後関係に狂いがない）。
【００５３】
つまり、情報採取プログラムは、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」における古い方から５個のアプリ識別子の順列「Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」がコール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」と整合する整合順列であると判断し、「５個」という数値が設定値ｊ＝２以上であることから、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」における６番目から最新の３個のアプリ識別子を新規起動アプリ順列「Ｋ→Ｇ→Ｌ」として抽出する。
【００５４】
＝＝＝発明の効果＝＝＝
以上の説明において、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」には新しい方から２番目に「Ｇ」が存在し、コール２リスト「Ｊ，Ｉ，Ｈ，Ｇ，Ｆ，Ｅ，Ｄ，Ｃ」には新しい方から４番目に「Ｇ」が存在している。この発明の方法によれば、両リスト中の「Ｇ」の存在に幻惑されることなく、新規起動アプリ順列「Ｋ→Ｇ→Ｌ」を正しく抽出することができる。
【００５５】
＝＝＝実施例１の続き＝＝＝
図１に示すように、コール３からコール４の期間では１個のアプり「Ｈ」が新規起動され、コール４リスト「Ｈ，Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｆ，Ｅ」の最新位置に「Ｈ」が存在し、コール３リスト「Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｈ，Ｆ，Ｅ」には古い方から３番目に「Ｈ」が存在している。この発明の方法によれば、上述したアルゴリズムにより両リストの「Ｈ」の存在に幻惑されることなく、新規起動アプリ「Ｈ」を正しく抽出することができる。  
同様に、コール４からコール５の期間では４個のアプリ「Ｍ→Ｎ→Ｇ→Ｈ」が新規起動されており、このうち「Ｇ」と「Ｈ」はコール４リスト「Ｈ，Ｌ，Ｇ，Ｋ，Ｊ，Ｉ，Ｆ，Ｅ」に存在している。この発明の方法によれば、上述したアルゴリズムにより両リストの「Ｇ」と「Ｈ」の存在に幻惑されることなく、新規起動アプリ順列「Ｍ→Ｎ→Ｇ→Ｈ」を正しく抽出することができる。
【００５６】
＝＝＝実施例１の補足＝＝＝
図１０のフローチャートでは、ステップ２１でＮＯと判断された場合およびステップ２２でＮＯと判断された場合は、最新起動アプリリストＲ（ｎ）のアプリ識別子の順列のすべてを新機器道アプリ順列として抽出することにしているが、これは一例にすぎない。この場合に最新起動アプリリストＲ（ｎ）に基づく新機起動アプリ順列の抽出判断を休止する（判断しない）こととしても良い。また、以上の説明では、ｍ＝８、ｊ＝２としたが、これは一例にすぎない。たとえば、ｍは２０前後に設定されるのが普通なので、ｊを５〜１０程度に設定することもある。
【００５７】
＝＝＝その他の実施形態＝＝＝
●実施形態（ア）
発明特定事項１〜５の発明において、アンドロイド端末に実装された前記情報採取プログラムにより第１プロセスで記録した情報が当該アンドロイド端末からインターネット上のサーバーに送信され、当該サーバーにおいて受信情報に基づき第２プロセスおよび第３プロセスが実行される形態。  
●実施形態（イ）
前記サーバーは、第３プロセスで記録された情報と、この情報の源泉であるアンドロイド端末の識別情報とを対応づけてデータベース化する形態。  
●実施形態（ウ）
アンドロイド端末の識別情報には当該アンドロイド端末のユーザー情報が含まれている形態。  
●実施形態（エ）
起動アプリ通知ＡＰＩのコール間隔は、アンドロイド端末とインターネットを介して通信する外部装置からの指示によって設定される形態。  
●実施形態（オ）
起動アプリ通知ＡＰＩのコール間隔は、前記情報採取プログラムにより動的に可変設定される形態。たとえば、あるコール間で抽出された新規起動アプリの個数が多いとコール間隔をより短くし、コール間で抽出される新規起動アプリ個数を抑制するように作用させるなど、第３プロセスで記録された情報に基づいてコール間隔を変化させる。時間帯を昼間と夜間とに設定しておき、夜間の時間帯にはコール間隔を短くするようにしてもよい。過去の起動順列から時間帯毎に起動されたアプリの数を算出し、アプリの起動された累積数や平均数が多いとコール間隔を短くするなど、過去に起動されたアプリの数に応じてコール間隔を変化させるようにしてもよい。  
この発明の射程には、アンドロイド端末に実装されて請求項２に記載の方法を当該アンドロイド端末上で実行させる情報採取プログラムが含まれる。同様に、この発明の射程には、前記サーバーに実装され、請求項３に記載の方法における第２プロセスおよび第３プロセスを当該サーバー上で実行させるサーバープログラムが含まれる。
【００５８】
＝＝＝第２実施形態＝＝＝
図１１は第２実施形態にかかる新規起動アプリの特定処理の流れを示す図である。  
起動時点推定部１２３は、最新起動アプリリスト取得部１２２が時点ｎにおいて最新起動アプリリストＲ（ｎ）を取得すると、時点ｎ−１における最新起動アプリリストＲ（ｎ−１）を起動リスト記憶部１２５から読み出し、リストＲ（ｎ）の最古（すなわちリストの最後）のアプリ識別ＩＤ（１）がリストＲ（ｎ−１）に含まれていない場合には（ステップ３１：ＮＯ）、最終起動アプリ識別子はリストＲ（ｎ）に含まれておらず、リストＲ（ｎ）に含まれるすべてのアプリ識別子が新規起動アプリを示すものと判断する（ステップ４３）。
【００５９】
起動時点推定部１２３は、変数ｉに２を設定し（ステップ３２）、リストＲ（ｎ）の古い順にｉ番目（最後からｉ番目）およびｉ−１番目のアプリ識別子ＩＤ（ｉ）およびＩＤ（ｉ−１）を抽出し、ＩＤ（ｉ）がリストＲ（ｎ−１）に含まれており、かつ、リストＲ（ｎ−１）において、ＩＤ（ｉ）はＩＤ（ｉ−１）よりも新しい場合は（ステップ３３：ＹＥＳ）、ｉをインクリメントし（ステップ３４）、ｉがｍ以下であれば（ステップ３５：ＮＯ）、ステップ３３からの処理を繰り返す。
【００６０】
起動時点推定部１２３は、ＩＤ（ｉ）がリストＲ（ｎ−１）に含まれていないか、または、リストＲ（ｎ−１）においてＩＤ（ｉ）がＩＤ（ｉ−１）よりも古い位置に含まれている場合には（ステップ３３：ＮＯ）、リストＲ（ｎ）の最古のアプリ識別子をａ１とし（ステップ３８）、リストＲ（ｎ）の古い順にｉ−１番目のアプリ識別子をａ２として（ステップ３９）、リストＲ（ｎ−１）においてａ１からａ２までの間に含まれるアプリ識別子のうち、リストＲ（ｎ）においてａ１からａ２までの間に含まれていないものをスキップアプリＩＤとして抽出する（ステップ４０）。
【００６１】
起動時点推定部１２３は、リストＲ（ｎ）において、すべてのスキップアプリＩＤが古い順にｉ番目以後にあれば（ステップ４１：ＹＥＳ）、ｉ−１番目のアプリ識別子が最新起動アプリ識別子であり、リストＲ（ｎ）のｉ番目以後のアプリ識別子が新規起動アプリを示すものと判断する（ステップ４２）。
【００６２】
起動時点推定部１２３は、リストＲ（ｎ）においてスキップアプリＩＤのいずれかが古い順にｉ番目以後になければ（ステップ４１：ＮＯ）、ステップ４３に進み、最終起動アプリ識別子はリストＲ（ｎ）に含まれておらず、リストＲ（ｎ）の全部が新規起動アプリであると決定する。
【００６３】
一方、起動時点推定部１２３は、ｉがｍを超えた場合（ステップ３５：ＹＥＳ）、リストＲ（ｎ）とリストＲ（ｎ−１）とが一致すれば（ステップ３６：ＹＥＳ）、新規起動アプリは存在しないと判断する（ステップ３７）。一致しなければ（ステップ３６：ＮＯ）、ステップ４３に進み、最終起動アプリ識別子はリストＲ（ｎ）に含まれておらず、リストＲ（ｎ）の全部が新規起動アプリと決定する。
【００６４】
なお、ステップ３６において、リストＲ（ｎ）の長さ（リスト（Ｒ（ｎ）に含まれているアプリ識別子の数）がＲ（ｎ−１）の長さよりも短い場合に、ステップ４３に進み、リストＲ（ｎ）およびＲ（ｎ−１）の長さが一致した場合にステップ３７に進むようにしてもよい。
【００６５】
＝＝＝実施例２＝＝＝
図１２（１）に示すように、リストＲ（ｎ）が「Ａ，Ｂ，Ｒ，Ｓ，Ｈ」であり、リストＲ（ｎ−１）が「Ｒ，Ａ，Ｓ，Ｂ，Ｔ」である場合を想定する。ステップ３１において、Ｒ（ｎ）に含まれる最古のアプリ識別子「Ｈ」はＲ（ｎ−１）に含まれていないので、ステップ４３により、Ｒ（ｎ）の全部が新規起動アプリと決定され、時点ｎ−１から時点ｎまでの間に起動したアプリの起動順列として「Ｈ→Ｓ→Ｒ→Ｂ→Ａ」が抽出される。
【００６６】
Ｒ（ｎ）において最古のアプリ識別子がＲ（ｎ−１）に含まれていないということは、時点ｎ−１から時点ｎまでにｍ個以上のアプリが起動されたと考えられるので、少なくともＲ（ｎ）に含まれるｍ個のアプリ識別子については新規起動アプリを示していると判断することができる。
【００６７】
一方、図１２（２）に示すように、リストＲ（ｎ）が「Ａ，Ｂ，Ｒ，Ｓ，Ｔ」であり、リストＲ（ｎ−１）が「Ｒ，Ａ，Ｓ，Ｂ，Ｔ」である場合、最古のアプリ識別子「Ｔ」はＲ（ｎ−１）にも含まれているので、ステップ３１→３２→３３と進む。Ｒ（ｎ）において古い順に２番目のアプリ識別子「Ｓ」は、Ｒ（ｎ−１）において「Ｔ」よりも新しい位置に含まれているので、ステップ３４→３５→３３と進み、３番目のアプリ識別子「Ｒ」についても、Ｒ（ｎ−１）において「Ｓ」よりも新しい位置に含まれているので、ステップ３４→３５→３３と進む。４番目のアプリ識別子「Ｂ」については、Ｒ（ｎ−１）に含まれているものの、「Ｒ」よりも古い位置に含まれていることから、ステップ３３→３８→３９→４０→４１と進む。
【００６８】
Ｒ（ｎ−１）において「Ｔ」から「Ｒ」までの間に含まれ、Ｒ（ｎ）において「Ｔ」から「Ｒ」までの間に含まれていないアプリ識別子は「Ｂ」「Ａ」であり、これらは両方ともＲ（ｎ）において４番目以後に含まれているので、ステップ４１→４２と進み、最終起動アプリは「Ｒ」と決定されて、「Ｒ」より後の「Ａ，Ｂ」について、「Ｂ→Ａ」が時点ｎ−１から時点ｎまでの間に起動されたアプリの起動順列として抽出される。
【００６９】
これは、時点ｎ−１までの間においてＲが起動された後に、Ｂ→Ａのアプリが起動されたところ、最新起動アプリリストには上述したアルゴリズム（ｂ）により古い時点での「Ｂ」「Ａ」についてのアプリ識別子が削除されることから、Ｔ〜Ｒの間からＡ，Ｂが削除されたものと考えられる。したがって、Ｒ（ｎ）のｉ番目以後については時点ｎ−１以後に起動されたものだとわかる。このように、アルゴリズム（ｂ）により古い時点で起動されたことが削除されてしまうアンドロイドＯＳによる起動アプリ通知ＡＰＩであっても、２時点でのリストを比較して、当該２時点間に起動されたアプリを正確に特定することができる。
【００７０】
図１２（３）に示すように、リストＲ（ｎ）が「Ｆ，Ｂ，Ｄ，Ｅ」であり、リストＲ（ｎ−１）が「Ｂ，Ｃ，Ｄ，Ｅ」である場合、Ｒ（ｎ）の最古のアプリ識別子「Ｅ」はＲ（ｎ−１）に含まれているので、ステップ３１→３２→３３と進む。Ｒ（ｎ）において２番目に古いアプリ識別子「Ｄ」は、Ｒ（ｎ−１）において「Ｅ」よりも新しい位置に含まれているので、ステップ３４→３５→３３と進む。３番目に古いアプリ識別子「Ｂ」についても、Ｒ（ｎ−１）において「Ｄ」よりも新しい位置に含まれているので、ステップ３４→３５→３３と進む。４番目に古いアプリ識別子「Ｆ」は、Ｒ（ｎ−１）に含まれていないので、ステップ３３→３８→３９→４０→４１と進む。
【００７１】
Ｒ（ｎ−１）で「Ｅ」から「Ｂ」までの間に含まれるアプリ識別子は「Ｃ」と「Ｄ」であり、このうちＲ（ｎ）において「Ｅ」から「Ｂ」までの間に含まれていないアプリ識別子は「Ｃ」であるので、スキップアプリＩＤは「Ｃ」となる。Ｒ（ｎ）において「Ｃ」は古い順に４番目以後に含まれていないため、ステップ４１→４３と進み、Ｒ（ｎ）の全部が新規起動アプリと決定され、「Ｅ→Ｄ→Ｂ→Ｆ」が起動順列として抽出される。
【００７２】
図１２（３）のように、スキップアプリＩＤの「Ｃ」がＲ（ｎ）に含まれていない場合とは、例えば、時点ｎ−１より後に「Ｃ」が起動されて最新起動アプリリストが「Ｃ，Ｂ，Ｄ，Ｅ」となり、その後、Ｅ，Ｄ，Ｂが起動されて、「Ｂ，Ｄ，Ｅ，Ｃ」となりさらにＦが起動されて「Ｆ，Ｂ，Ｄ，Ｅ」となった場合である。このように、Ｂ，Ｄ，Ｅを含むｍ個以上のアプリが時点ｎ−１以後に起動された場合にも、起動時点を正確に推定することができる。
【００７３】
図１２（４）に示すように、リストＲ（ｎ）が「Ｂ，Ｃ，Ｄ，Ｅ」であり、リストＲ（ｎ−１）が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ」である場合、Ｒ（ｎ）の最古のアプリ識別子「Ｅ」はＲ（ｎ−１）に含まれているので、ステップ３１→３２→３３と進む。Ｒ（ｎ）において古い順に２番目〜４番目のアプリ識別子「Ｄ」「Ｃ」「Ｂ」についても同様にステップ３１→３２→３３と進むことになり、ｉがｍを超え、ステップ３６に進む。
【００７４】
ここで、Ｒ（ｎ）とＲ（ｎ−１）は一致しないため、ステップ３６→４３と進み、Ｒ（ｎ）はすべて新規起動アプリと決定され、「Ｅ→Ｄ→Ｃ→Ｂ」が起動順列として抽出される。
【００７５】
アンドロイド端末１０が再起動されると、起動履歴はリセットされ、再起動後に起動されたアプリのみを含む最新起動アプリリストが取得されることになる。したがって、起動リスト記憶部１２５が不揮発性の記憶装置１０３に実装された場合、再起動直後には、図１２（４）に示すようにＲ（ｎ）に含まれるアプリ識別子の数がＲ（ｎ−１）よりも少なくなることがある。このような場合でも、ステップ３８〜４１の処理により、最新起動アプリリストに含まれるすべてのアプリが新規起動アプリであることを判断することができる。
【００７６】
＝＝＝第３実施形態＝＝＝
図１３は、第３実施形態に係る新規起動アプリの特定処理の流れを示す図である。  
起動時点推定部１２３は、最新起動アプリリスト取得部１２２が時点ｎにおいて最新起動アプリリストＲ（ｎ）を取得すると、時点ｎ−１における最新起動アプリリストＲ（ｎ−１）を起動リスト記憶部１２５から読み出し、リストＲ（ｎ）をＴＲ（ｎ）とし（ステップ５１）、リストＲ（ｎ−１）をＴＲ（ｎ−１）とし（ステップ５２）、ＴＲ（ｎ）の先頭のアプリ識別子をｔＩＤとする（ステップ５３）。起動時点推定部１２３は、ＴＲ（ｎ−１）に対して、ＴＲ（ｎ）が前方一致するかどうかを判定する（ステップ５４）。ここで前方一致すれば（ステップ５４：ＹＥＳ）、ｔＩＤを最終起動アプリ識別子と決定し、ｔＩＤよりも新しいアプリ識別子が新規起動アプリであると判断する（ステップ５９）。
【００７７】
起動時点推定部１２３は、前方一致しない場合（ステップ５４：ＮＯ）、ＴＲ（ｎ）からｔＩＤを削除するとともに（ステップ５５）、ＴＲ（ｎ−１）からもｔＩＤを削除する（ステップ５６）。起動時点推定部１２３は、ＴＲ（ｎ）又はＴＲ（ｎ−１）が空になれば（ステップ５７：ＹＥＳ）、リストＲ（ｎ）に含まれるすべてのアプリ識別子が新規起動アプリと判断する（ステップ５８）。ＴＲ（ｎ）およびＴＲ（ｎ−１）が空でなければ（ステップ５７：ＮＯ）、ステップ５３からの処理を繰り返す。
【００７８】
＝＝実施例３＝＝
図１４は、リストＲ（ｎ）が「Ｆ，Ｃ，Ａ，Ｂ，Ｄ」であり、リストＲ（ｎ−１）が「Ａ，Ｂ，Ｃ，Ｄ，Ｅ」であり、これらがＴＲ（ｎ）およびＴＲ（ｎ−１）にコピーされた状態を示す図である。ステップ５３においてｔＩＤは「Ｆ」となり、ＴＲ（ｎ）はＴＲ（ｎ−１）に対して前方一致しないため、ステップ５４→５５→５６と進み、ＴＲ（ｎ）から「Ｆ」が削除される。ここで、ＴＲ（ｎ−１）に「Ｆ」は含まれないのでＴＲ（ｎ−１）は変化しない。この時点でＴＲ（ｎ）は「Ｃ，Ａ，Ｂ，Ｄ」であり、ＴＲ（ｎ−１）は「Ａ，Ｂ，Ｃ，Ｄ，Ｅ」であり、それぞれ空ではないので、ステップ５７→５３と進む。
【００７９】
ステップ５３においてｔＩＤは「Ｃ」となる。ここでもＴＲ（ｎ）はＴＲ（ｎ−１）に対して前方一致しないので、ステップ５４→５５→５６と進み、ＴＲ（ｎ）およびＴＲ（ｎ−１）から「Ｃ」が削除される。この時点でＴＲ（ｎ）は「Ａ，Ｂ，Ｄ」であり、ＴＲ（ｎ−１）は「Ａ，Ｂ，Ｄ，Ｅ」であり、それぞれ空ではないので、ステップ５７→５３と進む。
【００８０】
ステップ５３においてｔＩＤは「Ａ」となる。ここでＴＲ（ｎ）はＴＲ（ｎ−１）と先頭から３つのアプリ識別子「Ａ，Ｂ，Ｄ」が一致して前方一致することになるので、ステップ５４→５９と進み、「Ａ」を最終起動アプリ識別子と決定し、元のＲ（ｎ）において「Ａ」よりも新しい「Ｆ，Ｃ」が時点ｎ−１から時点ｎまでの間に起動したものと推定して、起動順列として「Ｃ→Ｆ」を抽出する。
【００８１】
このようにして、第２実施形態と同様に、アルゴリズム（ｂ）により古い時点で起動されたことが削除されてしまうアンドロイドＯＳによる起動アプリ通知ＡＰＩであっても、２時点でのリストを比較して、当該２時点間に起動されたアプリを正確に特定することができる。
【００８２】
以上、本実施形態について説明したが、上記実施形態は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。
【００８３】
例えば、サーバー２０を省略して、起動アプリ調査システムをアンドロイド端末１０のみで構成し、起動ログをサーバー２０に送信しないようにしてもよいし、サーバー２０に起動時点推定部１２３を設け、アンドロイド端末１０の最新起動アプリリスト取得部１２２がサーバー２０に最新起動アプリリストを送信して、サーバー２０において起動時点を推定するようにしてもよい。
【００８４】
また、アンドロイド端末１０は、アンドロイド（登録商標）以外のフレームワークを実行していてもよい。当該フレームワークは、上述したアルゴリズム（ａ）（ｂ）に従って最新起動アプリリストを取得するためのＡＰＩを提供していればよい。
【００８５】
また、１つのアプリが複数のタスクを実行することができてもよい。この場合、タスクの起動推定時点をそのタスクに対応するアプリの起動推定時点としてもよいし、１つのアプリに対応する複数のタスクの起動推定時点のうち最新のもののみ、あるいは最古のもののみをアプリの起動推定時点としてもよい。
【００８６】
また、本実施形態では、最新起動アプリリストにおいて最終起動アプリよりも後のアプリの起動推定時点は、起動アプリ通知ＡＰＩを呼び出した２時点間の間の期間であるものとしたが、最終起動アプリよりも後のアプリの数に応じてこの期間を等分し、さらに起動推定時点を絞り込むようにしてもよい。この場合、時点ｎ−１の時刻をａ、時点ｎの時刻をｂ、最終起動アプリよりも後のアプリの数をｐとして、アプリ１つあたりの時間ｔを、ｔ＝（ｂ−ａ）÷ｐにより算出し、起動順列の古い順にｉ番目のアプリの起動推定時点はａ＋ｔ×（ｉ−１）からａ＋ｔ×ｉまでの間と判定されることになる。たとえば、図１４の例において、Ｒ（ｎ−１）が「００：００」に取得され、Ｒ（ｎ）が「００：０２」に取得されていたとすると、ｔは、「００：００〜００：０２」の２分を起動順列「Ｃ→Ｆ」中のアプリの数ｐ＝２で割った「００：０１」となり、「Ｃ」の起動推定時点は「００：００〜００：０１」、「Ｆ」の起動推定時点は「００：０１〜００：０２」と判定される。このようにして、さらに精度良く起動時点を推定することができる。
【符号の説明】
【００８７】
１０    アンドロイド端末
１１１  アンドロイド
１２１  情報採取部
１２２  最新起動アプリリスト取得部
１２３  起動時点推定部
１２４  起動ログ送信部
１２５  起動リスト記憶部
１２６  起動ログ記憶部
２０    サーバー
２１１  起動ログ受信部
２１２  起動ログ記憶部
３０    通信ネットワーク
【図１】
0005823826.tif 000002
【図２】
0005823826.tif 000003
【図３】
0005823826.tif 000004
【図４】
0005823826.tif 000005
【図５】
0005823826.tif 000006
【図６】
0005823826.tif 000007
【図７】
0005823826.tif 000008
【図８】
0005823826.tif 000009
【図９】
0005823826.tif 000010
【図１０】
0005823826.tif 000011
【図１１】
0005823826.tif 000012
【図１２】
0005823826.tif 000013
【図１３】
0005823826.tif 000014
【図１４】
0005823826.tif 000015