アプリをレジュームした時に処理を実行する

2011-03-22
かなり古い記事です。現在も有効な内容であるかどうか分かりませんのでご注意ください。

アプリをレジュームした時に処理を実行する

一度起動したアプリを閉じて、再度開いた時(レジュームした時)にTi.Appのresumeというイベントが発火する。
ちなみに閉じた時にはpauseイベントが呼ばれる。

レジューム時にはWindowのfocusイベントが呼ばれないので困っていたが、これで何とかなりそうだ。

それにしてもドキュメントェ・・・

サンプルコード

なにはともあれサンプルコード。

app.js
var win = Ti.UI.createWindow();
win.addEventListener("focus", function(){
    Ti.API.info("focus!");
});
win.open();

Ti.App.addEventListener("resume", function(e){
    Ti.API.info("resume!");
});

Ti.App.addEventListener("resumed", function(e){
    Ti.API.info("resumed!");
});

Ti.App.addEventListener("pause", function(e){
    Ti.API.info("pause!");
});

Ti.App.addEventListener("close", function(e){
    Ti.API.info("close!");
});

動作

起動時
[INFO] focus!

起動時にはきちんとfocusが呼ばれる。resumeは呼ばれない。

閉じた時
[INFO] pause!

UIの操作を行うとすぐには実行されず、レジューム時に実行される。
Ti.API.infoの代わりにalertを使うとこのあたりの挙動が確認できる。

レジュームしたとき
[INFO] resume!
[INFO] resumed!

レジューム時にはfocusが呼ばれない。

resumeとresumedの違いはTiModule.mのコメントによると

// Different from resume - there's some information we can only update AFTER the app has popped to the foreground.

ということらしい。
アプリがフォアグラウンドになった後でないとできない処理があるってことかな。UIが絡む処理とか?

closeってイベントもあるようなんだけど、タスク一覧から終了した場合も呼ばれなかった。
iOS 4.0以降ではcloseって呼ばれないものなんでしょうか。

参考

Profile

フルスタック気味のフリーランスプログラマー。

どちらかと言うと得意はインフラ構築とサーバーサイドプログラミングですが、フロントエンドもぼちぼちやっています。

最近の興味範囲はWordPress、AWS、サーバーレス、UIデザイン。

愛車はセロー。カメラはペンタックス。旅好きです。横浜在住。