Android NDKにおけるシグナル発生時動作

Android NDKを使用している中で二点つまづいた点があったので、挙げておきます。

まず、AndroidのDalvik仮想マシンは、SIGQUITとSIGUSR1を使用するようで、これらシグナルのハンドリングを自分のプログラムで行うことはできません。
シグナルハンドラは呼び出されませんし、また、システムコールの中でEINTRを戻すような動作も行われません。ですので、使うのであれば、SIGUSR2あたりになるかと思います。(実は、SIGUSR2もDalvikのビルドスイッチ次第では使われるそうですが。)

二つ目は、usleepというシステムコールがシグナルによる割り込みが入っていも、EINTRで戻らないということです。理由は分かりませんがそのようになっています。
これには代案があります。それは、usleepの代わりにnanosleepを使用することです。nanosleepはシグナルによる割り込みに対して、EINTRで戻ってきます。

Androidでスクリーンショット

以前iPhoneユーザがお手軽にスクリーンショットを撮っているのをみて、Androidでもできないかと調べてみたのですが、手順がややこしくとても実用的なものではなかったので諦めていました。
ところが今日、何気にAndroidのSDカードの直下を見てみると「screen shot」という見慣れないフォルダができているのを発見しました。中を見ると、2週間ほどまえの日付のホーム画面の画像がPNGで保存されていました。
さっそく再調査してみたところ、一部機種(私はGALAPAGOS SoftBank 003SHを使っています。)はホームボタンと電源ボタンの同時押しでスクリーンショットが撮れるとのこと。
試してみると見事に撮れました。

2週間ほど前に意図せず撮れていたスクリーンショットが功を奏したかたちとなりました。