別のアプリを使ってから復帰する - Kivy Advent Calendar 2013
KivyLauncherでテキスト入力だけのアプリを作り、何か入力してから別のアプリに切り替えてみます。しかしその後KivyLauncherに戻ってもランチャ画面になってしまい、入力した内容は失われてしまいます。
(main.py)
from kivy.app import App from kivy.uix.textinput import TextInput class Memo(TextInput): pass class MemoApp(App): def build(self): self.memo = Memo() return self.memo if __name__ == '__main__': MemoApp().run()
モバイルOSのアプリ切り替えは必ずしもメモリ上に残ることを保証していないため、アプリが自主的に状態を保存する必要があります。Kivyアプリが状態保存に対応していない場合は、(menuボタン等による)アプリ切り替えも(home/backボタンによる)終了と同様に終了処理が呼び出されます。KivyLauncher自体はメモリに残っていたとしても、すでにKivyアプリは終了しているため復帰が行われてもランチャ画面に戻ってしまいます。
Kivyアプリに復帰できるようにするにはon_pause、on_resumeメソッドを用意します。
on_pauseが最後にTrueを返すと、別のアプリに切り替える際に終了処理を呼び出さなくなるので、KivyLauncherがメモリ上に残っていればそのKivyアプリにすぐ復帰します。またOSがKivyLauncherのメモリを解放していた場合でも、ファイルに保存した状態をon_resumeでメモリに呼び戻して同じように復帰できます。
(main.py)
from kivy.app import App from kivy.uix.textinput import TextInput class Memo(TextInput): pass class MemoApp(App): def on_pause(self): with open('memo.txt', 'w') as f: f.write(self.memo.text) return True def on_resume(self): with open('memo.txt') as f: self.memo.text = f.read() def build(self): self.memo = Memo() return self.memo if __name__ == '__main__': MemoApp().run()
追記
さすがにbackボタンで終了した場合は内容はクリアされます (たぶんon_stopにフックをかければ保存対応可能かと思いますが...)