iモード携帯電話用Java(iアプリ) Part10
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/11/10(木) 15:11:53※DoCoMo以外は下記スレへ。
CLDC+MIDP+携帯電話用Javaスレッド part 4
http://pc5.2ch.net/test/read.cgi/tech/1108781476/
■ iアプリ特有ではなくJava一般に関する質問はこちらへ
【初心者】Java質問・相談スレッド68【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1119115837/
■ iモード携帯電話用Java(iアプリ)まとめサイト
http://ton.my-sv.net/
■関連スレ
【日本携帯】Mascot Capsule/Micro3D【標準】
http://pc8.2ch.net/test/read.cgi/tech/1117773530/
過去スレ
Part 1 http://piza2.2ch.net/tech/kako/975/975428633.html
Part 2 http://pc3.2ch.net/tech/kako/1000/10007/1000723476.html
Part 3 http://pc2.2ch.net/test/read.cgi/tech/1040898596/
Part 4 http://pc5.2ch.net/test/read.cgi/tech/1067139509/
Part 5 http://pc5.2ch.net/test/read.cgi/tech/1084246226/
Part 6 http://pc5.2ch.net/test/read.cgi/tech/1091286071/
Part 7 http://pc5.2ch.net/test/read.cgi/tech/1102844217/
Part 8 http://pc8.2ch.net/test/read.cgi/tech/1110946222/
Part 9 http://pc8.2ch.net/test/read.cgi/tech/1120411353/
0159151
2005/12/02(金) 10:01:33メモリがいっぱいいっぱい 処理はもう少し余裕がある
→処理を犠牲にしてでも メモリ効率を気にする
メモリが余裕 処理がキチキチ
→メモリを気にするより 処理に余裕を持たせる
という解釈は間違っていますか?
0160デフォルトの名無しさん
2005/12/02(金) 10:19:090161デフォルトの名無しさん
2005/12/02(金) 10:33:26それぞれに必要なbit数を数える。
8bit以内ならbyteでもいいと思う。
0162デフォルトの名無しさん
2005/12/02(金) 10:35:21携帯アプリの新端末が出るたびに保守対応をしていく状況と、
開発者が次々に辞めたり手が空いてる人がいなくて
他人のソースを見る必要がある現状だと
ソースの保守性の方を優先して欲しいと思う(´・ω・`)
0163デフォルトの名無しさん
2005/12/02(金) 10:45:45そもそも、intとbyteの容量差ごときを気にしなければならないほどメモリの使用状況がシビアなの?
>>155
> int型の多次元配列で フラグ,攻撃力,命中補正って感じでやりたい
これを見る限りそのような話にはとても見えないが。
> 大学の講師さんが「フラグは1か0でいいわけだから、int型を宣言するより、
> BYTE型で1bitだけ使って後のbitを攻撃力とかに回した方が効率がいい」
また時代錯誤な。象牙の塔の人間にありがちだなm9(^Д^)プギャーとか言ってみるテスト。
「効率がいい」って、いったい何がどのように効率がいいのですか。
そうした面倒な工夫をすることで、実際のプログラムは高速になってますか。
また、そもそもメモリを節約する必要はあるのですか。
そうした工夫は、単に汚くて保守困難なバグの多いコードを生み出すだけではありませんか。
その講師に超おすすめのページ↓
http://pitecan.com/articles/Bit/Fugo/fugo.html
効率を云々する前に、まず「そんなこと気にせんでも動くんちゃうの?」と考えよう。
パフォーマンスが出ないなり、実際にメモリ不足で止まるなり、問題が起きてから対処すればよい。
0164デフォルトの名無しさん
2005/12/02(金) 10:54:53フラグなら素直にboolean使っとけや
0165デフォルトの名無しさん
2005/12/02(金) 11:46:46そもそもビットで管理する事とintとbyteの容量差を混ぜて語ってるのが間違いなんだよね。
さらにいうなら、フラグはビットでいいが攻撃力はビットじゃ足りないだろ。
昔のTRPGみたいにサイコロの範囲内で決着が付くなら問題ないけど、攻撃力300
とか行くなら9bit必要でしょ?byteにどうやっていれるのさ?
よしんばintの32bitで管理したとして、フラグと、攻撃力と、補正値を出し入れするのに
いちいちビット演算する気? & マスクとビットシフトするくらいなら素直に配列
使った方がマシだと思う。
試しに、32bitにその3つの情報を出し入れするコードを書いてみればいい。
1bitで済む情報だけを、1つのintに複数個入れるならいいけど、数値を扱うなら
ビット演算なんて検討するのは無駄。
0166デフォルトの名無しさん
2005/12/02(金) 11:53:320168デフォルトの名無しさん
2005/12/02(金) 12:12:16ただ最近の携帯ならメモリや速度でんでんより、ビット圧縮解凍処理を入れる事によって
アプリ本体の容量が増えてしまってり、バグ発生時の対処が大変だったり、
仕様変更に耐えれなかったり、面倒な種になることが多いw
知識として持っておくには良い事だろうと思うよ。やるかどうかは別で。
プログラマとしてはビット演算によるデータの保持は基本とも言えるし、
知識がないと後から考察しろと言われても出来ないor苦労するわけだし。
余談:
メモリ効率どうこうとは話変わるが携帯でビットでフラグを所持するのは
外部ファイルとして持つ場合有効とも言える。セーブデータなんかも。
が・・・最近は外部JAR(ZIP)解凍が出来るようになったので
下手にビット演算して小さくすると逆効果になったりもするwww
ケースバイケースだなw
0169デフォルトの名無しさん
2005/12/02(金) 13:23:040 : 0
1 : 20
2 : 50
3 : 100
4 : 200
5 : 300
とかならbit数少なくても問題なし
0170デフォルトの名無しさん
2005/12/02(金) 13:47:050171デフォルトの名無しさん
2005/12/02(金) 13:58:310172デフォルトの名無しさん
2005/12/02(金) 14:13:36メモリ食わないか?という疑問に関しては、JAVAにBYTE型なんて存在しないという返事で一蹴している。
結論的には「メモリ食う量は同じ」だからね。
その上で、より高速なintを薦めた。
0173デフォルトの名無しさん
2005/12/02(金) 14:42:450174デフォルトの名無しさん
2005/12/02(金) 15:20:58素直にバイト配列使っとけや
0175デフォルトの名無しさん
2005/12/02(金) 16:05:58private final static byte[] b = { 0, 1, 2, 3, 4 };
とか、バイトコード眺めて唖然としたわ。
0176デフォルトの名無しさん
2005/12/02(金) 17:29:37腫れ上がらない
圧縮技術を勉強知る
0177デフォルトの名無しさん
2005/12/02(金) 18:32:05finalでないシンボルを作るのに比べたらはるかに少ないけど、やはり膨れるぞ。
それはjarで圧縮してもいっしょ。proguard使えば話はかなり違うだろうな。
ちゃんと携帯java技術を研究知る
0178デフォルトの名無しさん
2005/12/02(金) 18:48:45本当にごめんなさいっ!
だからプリプロセッサを使うハメになる…。
0179デフォルトの名無しさん
2005/12/02(金) 18:54:50なんでこんな糞端末使う気になるんかね?
メニュー周りのわずらわしさだけで会社の携帯地面に叩き付けそうになるヨ'`,、('∀`) '`,、
0180デフォルトの名無しさん
2005/12/03(土) 01:06:09おそらくあなたの携帯が使い難いんでしょう
0181デフォルトの名無しさん
2005/12/03(土) 07:31:32つーかbyte型ここ数年全然使ってないことに気づいた。
>>174
> 素直にバイト配列使っとけや
Javaではint配列のほうが1億万倍素直だ。
VMのインストラクションセットとコンパイル結果のバイトコードをよーく見てみろ。
0182181
2005/12/03(土) 07:39:31俺はImageMap使ってないし、これもDoJa-4.0からはint型のに置き換えられてる。
まあ、今時1バイトでデータを格納するなんてさもしくないかってこった。
0183デフォルトの名無しさん
2005/12/03(土) 08:21:35このマップをメモリにロードするときbyte[]ではなくint[]使えということでしょうか?
0184デフォルトの名無しさん
2005/12/03(土) 08:38:270185デフォルトの名無しさん
2005/12/03(土) 09:30:06Connector.openDataInputStreamでSPにアクセスして
DataInputStream.read(byte[] buf)でロードしてますが
int[]型にするにはどうするのですか?
0186デフォルトの名無しさん
2005/12/03(土) 10:44:15前レスみたかい?
0187デフォルトの名無しさん
2005/12/03(土) 13:04:45他への移植も考えたら別にbyteでもいいんじゃね?
0188デフォルトの名無しさん
2005/12/03(土) 21:29:01JUnitもしくはそれに似たようなものをDoja環境で使っているという人います?
0189デフォルトの名無しさん
2005/12/04(日) 00:22:07書けるよ。ただしテストやビルド用の環境をちゃんと作らないとダメだぞ。
0190デフォルトの名無しさん
2005/12/04(日) 12:27:43EclipseとDo-ja動かしていると程よく殺意とストレスが溜まってきます。
ココに要られる方で低スペックパソコンでストレス無く開発されている方がおられましたら
是非そのテクニックを伝授して欲しいのです。
ちなみにOSはXPで無駄なアンチウイルスソフトとか、XPの機能などは全て停止させています。
0191デフォルトの名無しさん
2005/12/04(日) 14:16:07HDDを大容量にする
Eclipseは2.x
高速化ソフトを入れる
フリーソフト窓の手を入れる
雑誌・本をレジストリをごにょごにょ
最終手段 SafeModeで起動
でも一番苦労しないのは新しいのを買うこと
新品が59800円なんて5年前なら内臓破裂ものだぜ?
0192デフォルトの名無しさん
2005/12/04(日) 14:18:180193デフォルトの名無しさん
2005/12/04(日) 16:27:19「iappli Development Kit for doja-4.0(FOMA)を完全にインストールする
前にウィザードが中断されました。
システムが変更されていません。後でこのプログラムをインストールするに
は、再度インストールを実行してください。
ウィザードを終了するには[完了]をクリックしてください。」
と表示されてインストールできないんですが、何が悪いのでしょう?
ちにみに、j2sejdk1.3.1_16はインストールしてあります。
0194デフォルトの名無しさん
2005/12/04(日) 16:34:500195デフォルトの名無しさん
2005/12/04(日) 18:56:50マウスを動かしても全然反応ないというか,エミュレータでのポインティングデバイス
に相当するものがわかりません.
0196デフォルトの名無しさん
2005/12/04(日) 20:53:550197デフォルトの名無しさん
2005/12/04(日) 23:42:37エミュでできたかな…。試したことねーや…。
0198デフォルトの名無しさん
2005/12/05(月) 19:37:15最近になって FOMAのアプリの開発を始めました。
初歩的なことですいません。
バックライトを常時点灯させたいために以下のコードを
書いたのですが、 isAvailable()のリターン値が必ず falseが
帰ってきてしまいます。
なにか、書き方が良くないのでしょうか?
テストした機種はSH901isです。
よろしくお願いします。
if ( PhoneSystem.isAvailable(PhoneSystem.DEV_BACKLIGHT) == true ){
PhoneSystem.setAttribute(PhoneSystem.DEV_BACKLIGHT,PhoneSystem.ATTR_BACKLIGHT_ON);
}
0199デフォルトの名無しさん
2005/12/05(月) 20:07:32何も不思議はない。バックライト制御ができない端末ってことだ。
0200デフォルトの名無しさん
2005/12/05(月) 20:11:23だからアプリからバックライトやバイブレーションの制御が好き勝手に出来ない端末がある。
明かり点けっぱなし、モーター回しっぱなしでバッテリー消費しまくりのアプリを防ぎたい、ってことで。
0201デフォルトの名無しさん
2005/12/05(月) 21:01:15本体側の設定で、バックライト制御の項目が「システム」になってると
falseが返ってくるようになってるんじゃないの?
0202デフォルトの名無しさん
2005/12/05(月) 21:03:49何回再起動しても同じです・・・。
0203デフォルトの名無しさん
2005/12/05(月) 23:00:23http://hobby7.2ch.net/test/read.cgi/appli/1133790912/
0204195
2005/12/06(火) 00:16:35N端末のやつです.
N端末を買ったらニューロポインタがついてたので,それを使ったアプリが
作れないかと思いまして.
ん・ぱか工房の辺りを見るとエミュレータで動かしてるっぽい画像が載ってる
のですが,やり方が全然書いてないみたいなので.
何か見落としてるんでしょうか?
0205デフォルトの名無しさん
2005/12/06(火) 00:51:45とりあえず表示ってやってみた?
一回しかニューロポインタ使ったアプリ作ったことないからうろ覚えで悪いが。
0206198
2005/12/06(火) 11:43:15やはりそういうことなんですね。
>本体側の設定で、バックライト制御の項目が「システム」になってると
>falseが返ってくるようになってるんじゃないの?
設定をいろいろ見たのですが、そういう設定が見当たらないのです。
0207デフォルトの名無しさん
2005/12/06(火) 13:20:120208198
2005/12/06(火) 13:26:41SH901isとN701です。
0209195
2005/12/06(火) 14:16:28とりあえず
PointingDevice.setEnabled(true);
って書いてあります.で,
PointingDevice.getX()とかで座標を表示してみたのですが,0って書いてあるまま
変化がありません.
0210デフォルトの名無しさん
2005/12/06(火) 14:58:24初期化は
if( PointingDevice.isAvailable()){
PointingDevice.setEnabled(true);
PointingDevice.setMode( PointingDevice.MODE_JOYSTICK );
}
だけっぽい。
0211デフォルトの名無しさん
2005/12/06(火) 15:18:05俺SHだが・・・ないなwwww
説明書どこかあったら見れてみればいいんでない?w
0212195
2005/12/06(火) 16:09:16すみません,実機で試すのを忘れていました.
実機では普通に動きました.
エミュレータだけうまくいってないようです.
「DoJa-4.0プロファイル向けiアプリ開発ツール」というのを使っているのですが,
これはポインティングデバイスには対応してないのでしょうか?
0213デフォルトの名無しさん
2005/12/06(火) 16:17:120214195
2005/12/06(火) 16:25:14すみません.ただ,Googleで検索しても全然ヒットしないので・・・
APIのリファレンスにはエミュレータの使い方なんて書いてありませんし,
ポインティングデバイスを使った場合のエミュレータの使い方を解説したサイトが
ないみたいなんです.
0215デフォルトの名無しさん
2005/12/06(火) 16:36:010216デフォルトの名無しさん
2005/12/06(火) 17:30:11実機でテストしろ
0217デフォルトの名無しさん
2005/12/06(火) 19:33:31なぜエミュレータのドキュメントを読まないのさ。
「エミュレーションの範囲」の項目を読んで自分で判断しろ。
0218デフォルトの名無しさん
2005/12/06(火) 19:35:11setMode() で MODE_MOUSE にして
setVisible(true) ってしてみたら?
0219195
2005/12/06(火) 19:56:43うーん,やっぱりそうなってしまうんでしょうか.
>>217
私が見た限りでは触れていないように見えます.
エミュレータで動かせるだろうと判断した根拠は
ここ http://www.saturn.dti.ne.jp/~npaka/sorami/2/index.html
の画像を見たからなんですが・・・
>>218
試してみましたが駄目でした.
0220デフォルトの名無しさん
2005/12/06(火) 20:29:250222デフォルトの名無しさん
2005/12/06(火) 22:14:37PointingDevice.setEnabled(true);
PointingDevice.setVisible(true);
↑初期化、setModeを先にやらないと例外が発生する端末がある
後は getX() とかで座標を拾う
操作はエミュレータの「決定ボタンの上」で、マウスの右ボタンを押しながらマウスを動かす
MODE_JOYSTICK の場合は getDirectionX() とかを使う
この場合画面の座標ではなく、入力方向が得られる
0224デフォルトの名無しさん
2005/12/06(火) 22:51:11ふと思ったんだけどさ。
そろそろモバイルで悪魔召喚プログラムとか出ねーのかな。
*/
0225デフォルトの名無しさん
2005/12/06(火) 23:04:52エミュレータでのポインタ操作については DoJa4.0のドキュメントには書いてない(と思う)
でもどっかで見たことあるなぁ〜と探していたら DoJa2.1のドキュメントに記述があったw
0226デフォルトの名無しさん
2005/12/07(水) 01:22:23↑でダウンロードしたURLが取れるみたいなんですが、
これ以外に、ADFの値って取れないですか?
例えば、AppVer(バージョン)とか、取りたいんですが。。。
0227デフォルトの名無しさん
2005/12/07(水) 03:51:290228デフォルトの名無しさん
2005/12/07(水) 10:11:390229デフォルトの名無しさん
2005/12/07(水) 11:14:04メガテンのサイトにおいきなさい。
0230デフォルトの名無しさん
2005/12/08(木) 19:27:15�@SPのgifのパレット部分を0xFFで埋める
�AgifをMediaManager.getImageで作成、表示
�BSPのgifのパレット部分を元に戻す
�CgifをMediaManager.getImageで作成、表示
�D1へ戻る
上記の様にして白点滅を行っています。
この時、
P901iはスムーズに動き、
P902iは激しく遅いんですが、原因が分かりません。。。
なぜでしょうか???
0231デフォルトの名無しさん
2005/12/08(木) 19:38:54実機無いからわからんがP902はスクラッチパッド読み書きが遅いとかそういうのは無い?
あと質問、D505でサウンドを止めたり鳴らしたりしてると
たまにサウンドが再生されないことって無い?
心当たりがあって対応したことある人の情報求む(´・ω・`)
0232230
2005/12/08(木) 19:43:45返答ありがとうございます。
iアプリのベンチ
ttp://npaka.yoko.ne.jp/bench/bench.jsp
こちらを見る限り、P902iの方が早い様です。
ゲームデータのセーブ(1.5kB程)もP902iは非常に遅いのですが、
奇妙な事に2回目以降のセーブは、P901iよりも早かったりします。
う〜む。。。
0233デフォルトの名無しさん
2005/12/08(木) 19:46:29902はSP書き込みがちと遅かったような。
てか、毎回作り直しゃ遅いに決まってるので
�Aと�Cの画像を1回だけ作って保持、交互に出せばいいだけかと。。。
>>231
D505i(S) iアプリ作成に関する注意事項の一番最初の項目参照。
0234デフォルトの名無しさん
2005/12/08(木) 19:57:55あり�d(´・ω・`)
とりあえずsleep入れて駄目だったらAUDIO_STOPPED待ってみる。
容量が足りればだけどね(ノ∀`)
0235230
2005/12/08(木) 20:05:04返答ありがとうございます。
実はその処理への移行途中でして、、、
全データ(260kB)のダウンロード時間を計ってみました。
P901i 1分6秒
P902i 1分10秒
Connector.openOutputStream の初回呼び出しがやたら遅い気がしてきました。
とりあえず、白点滅処理を変更して様子を見てみます。
ありがとうございました。
0236デフォルトの名無しさん
2005/12/08(木) 20:46:38while( true ) {
try {
print("->1");
((MApplication)IApplication.getCurrentApp()).deactivate();
print("->2");
((MApplication)IApplication.getCurrentApp()).sleep();
print("->3");
break;
}
catch( Exception e ) {
print("->err");
}
}
アプリボタンを連打していると(おそらく、スリープ状態に移行したタイミングでアプリボタンを押す)sleepのところでハングします。
AppTraceにて確認したところ、
->1
->2
->3
->1
->2
ここで停止
"->err"の例外もとれていないし、そもそもjavaの実行自体が止まっているような感じです。
機種はD902iです。
動作が正常なものと同じようにハングする機種があって困っています。何か情報をお持ちの方教えてもらえませんか?
0237デフォルトの名無しさん
2005/12/08(木) 21:34:02そもそも何がしたいの?
0238236
2005/12/08(木) 21:49:40単純にただの待ち受けアプリなんですが、アプリボタンを連打するとsleepに移行しない機種があるので、
ふつうはどんな実装にするのかなと思ったんです。
0239デフォルトの名無しさん
2005/12/08(木) 22:29:17連打すると、非活性のときにsleepしようとする
ことがあるから休眠に遷移しないのでわ。
whileループはどこに書いたの?start()かね。
(1) 連打しないとき
非活性 deactivate()
↓
休眠 sleep()
↓← 活性化ボタン
活性
(2) 連打したとき
非活性 deactivate()
↓← 活性化ボタン
活性
↓
休眠 sleep() ※例外 IllegalStateException
0240デフォルトの名無しさん
2005/12/08(木) 22:42:33ちなみにスレッドにしてみたのですが、現象は変わりませんでした。
いまはstart()内のメソッドを無限ループさせています。
タイミングによって
deactivate()
←ここで活性化される
sleep()
活性化状態なので例外発生
の部分は考慮していて、try〜catch部分でループするようになっています。
今回の場合は、sleepメソッドを実行してるにもかかわらず、待ち受けに遷移しない+JavaVMの実行自体は止まってるっぽい。という状態になってます。
sleepが素直に例外を吐けば、sleepできるまでループすればいいだけなんですが、止まってしまうので悩んでます。
タイミング的に「sleep→待ち受け→ここで即座にαボタン」でこの現象が起こります。
0241デフォルトの名無しさん
2005/12/08(木) 23:03:48トレースが出ないことを除けば、動作しているように見えるんだけど。
・JavaVMの実行自体は止まってるっぽい ←sleepできたからVMが止まる
・sleepが素直に例外を吐けば ←sleepが成功したから例外を吐かないのでは
ついでにそもそも、どうしてsleep(休眠状態)にするのかというと、
・携帯を折り畳んだから休眠する
・一定時間、ボタン操作がないから休眠する
だろうから、sleepするために
ループでぐるぐる回すのはAPIの使い方として変な気がする。
0242デフォルトの名無しさん
2005/12/08(木) 23:10:46whileで回してるのは、deactivate() →sleep()の間に、たまたま活性化の割り込みが入る場合があるから、その対処としてwhileしています。
そもそも、sleepから復帰したらwhileは抜けるし、 通常よっぽど間が悪くなければ例外吐かずに1発で休眠してくれます。
問題なのは、休眠していない(待ち受け状態になっていない)のに、JavaVMが停止してかつ、その時にいっさい例外を吐かない状態があるということなんです。
ショートプログラムを作成してみたので気になるところがあったら教えてもらえませんか?
↓
0243デフォルトの名無しさん
2005/12/08(木) 23:14:02import java.io.*;
public class Exec extends MApplication {
public void start() {
System.out.println("[start]");
while( true ) {
System.out.println(" >>[loop]");
}
}
public void resume() { }
public void processSystemEvent(int ptype,int param) {
System.out.println("[event]");
while( true ) {
System.out.println(" >>[0]");
try {
System.out.println(" >>[1]");
deactivate();
System.out.println(" >>[2]");
sleep();
System.out.println(" >>[3]");
break;
}
catch(Exception e) {
System.out.println(" >>[err]");
}
System.out.println(" >>[4]");
}
System.out.println("[end]");
}
}
0244デフォルトの名無しさん
2005/12/08(木) 23:50:31このコードだと、sleepが終わるとまたprocessSystemEventが
呼ばれるだろうから、永遠に休眠状態から出られない気がするんだけど。
トレースが出ないのは、processSystemEvent→processSystemEventの
ループがシステムのイベントキューを占有するからだと思うが。
すまんが漏れにはこれ以上の分析はできん。
0245デフォルトの名無しさん
2005/12/09(金) 00:06:49なるほど、キューがたまるのか。。。と思って、今度はstart()側に、flagを設定して、flagの状態でsleepしてみたが、状況は変わらなかったです。
processSystemEvent()もsynchronized設定して、他のスレッドから割り込みかからない状態にしてみました(下に書いてみた)
public synchronized void processSystemEvent(int ptype,int param) {
System.out.println("[event]");
flag = true;
System.out.println("[end]");
}
うーん、待ち受けに戻った直後にαボタンを押すのは駄目ってことなのか・・・。
F901iCの場合は、電源を切るしかない状態になってしまうんだけど。。。。
0246デフォルトの名無しさん
2005/12/09(金) 00:23:15聞きわすれたけど、start()の中に無限ループがあるのは
なんでなの?
0247デフォルトの名無しさん
2005/12/09(金) 13:48:10ふつうゲームをつくるときに、start()のなかでスレッドを起動するか、そこで無限ループさせるから、それを状況的に再現してるって感じです。
プログラム的にはべつに意味はありません。
いろいろ調べたんだけど、非活性から待ち受け状態に移行した直後にαボタン押すとやっぱり駄目みたい。
メーカー発表あってもいいような不具合だと思うんだけど、最近ドコモなんにも発表しなくなったような・・。
0248デフォルトの名無しさん
2005/12/09(金) 15:08:43不安定っぽいです。で私はこうしてます。
まずイベントハンドラ内でdeactivate()だけ呼んだ後にタイマを仕掛けます。
次にprocessSystemEvent()のWAKEUP_TIMER_EVENTで、
そのタイマが発火したら(1000msとか一定時間経過後)、
もう一度deactivate()してsleep()します。
この時processSystemEvent()がMODE_CHANGE_EVENTを受けたら
無条件でそのタイマーを止めます。
こうするとprocessSystemEventがパラで呼ばれない限り、
deactive()とsleep()の呼び出しがアプリボタン(MODE_CHANGE_EVENT)で分断されるということはありません。
0249248
2005/12/09(金) 15:13:05> 次にprocessSystemEvent()のWAKEUP_TIMER_EVENTで、
> そのタイマが発火したら(1000msとか一定時間経過後)、
> もう一度deactivate()してsleep()します。
(中略)
> こうするとprocessSystemEventがパラで呼ばれない限り、
> deactive()とsleep()の呼び出しがアプリボタン(MODE_CHANGE_EVENT)で分断されるということはありません。
ごめん、嘘書いた。 orz
ともかくTimer回して、そっちでdeactivate();sleep()するようにすると安定するよ、
ということだと思ってください。
0250デフォルトの名無しさん
2005/12/09(金) 18:10:06なるほど。言うとおりにやってみたら安定した。サンクス。
せっかくなので状況をまとめます。
1・休眠→活性化→非活性→休眠→活性化・・・と続けることができるアプリの場合、非活性から休眠まで一定時間がないと落ちる機種がある。
2・無限ループ、スレッドsleepを入れる、キューがたまるから・・・は関係なし。
3・対処として、deactivate後に一定時間おいてsleep。検証では時間の長さではなく、同一スレッドでdeactivate();sleep()としてるのがまずい。
4・待ち受けスケルトン作ってみた。
0251デフォルトの名無しさん
2005/12/09(金) 18:13:34public class Exec extends MApplication {
canvas can = null;
public void start() {
can = new canvas();
Display.setCurrent(can);
// 特に意味はありません。ゲーム的なループです
while( true ) { System.out.println(" >>[loop]"); }
}
public synchronized void processSystemEvent(int ptype,int param) {
if( ptype == MApplication.MODE_CHANGED_EVENT ) {
System.out.println("[event]");
((MApplication)IApplication.getCurrentApp()).deactivate();
can.stime.stop(); can.stime.start();
}
}
}
class canvas extends Canvas {
ShortTimer stime = null;
public canvas( ) { stime = ShortTimer.getShortTimer(this,1,100,false); }
public void paint( Graphics g ) {}
public synchronized void processEvent( int ptype, int param ) {
if( ptype == Display.TIMER_EXPIRED_EVENT ) {
try {
System.out.println(" >>[sleep]");
((MApplication)IApplication.getCurrentApp()).sleep();
}
catch(Exception e) { stime.stop(); stime.start(); }
}
}
}
0252248
2005/12/09(金) 20:58:28安定したなら良いんだけど、そのサンプルは微妙に意味合いが違うかも。
ポイントは、同一スレッドでというよりは、
ユーザが起こしたイベント(キー入力とか)のハンドラ内でMApplication.sleep()を呼んではダメで
タイマーなどシステムが起こすイベントのハンドラ内ならOKっぽい。という点ね。
0253デフォルトの名無しさん
2005/12/09(金) 23:54:31サンプルではキー入力で活性化したときに、タイマーをスタートさせて、そのタイマーイベント時にsleepしてるけど、
そじゃなくてタイマーとかでシステムがおこしたイベントならdeactivate();sleep();がオケーってことですか?
いまいち意図をくみ取れてないみたいですみませぬ
そしてずっと上げ続けたみたでさらにすまぬorz
0254iアプリ
2005/12/10(土) 20:49:32ちなみにP901iSつかっていてファミコンをしたいとおもってます。
0255デフォルトの名無しさん
2005/12/10(土) 20:59:130256デフォルトの名無しさん
2005/12/11(日) 03:02:330257デフォルトの名無しさん
2005/12/12(月) 01:13:41SD-Binding〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< DoJa-4.1開発ツールまだ〜?
\_/⊂ ⊂_)_ \____________
0258デフォルトの名無しさん
2005/12/12(月) 12:55:58色々調べたのですがPackageURL、AppSizeに間違いを修正してもできません。
原因として他にどういったことが考えられるでしょうか?ご教授お願いします。
■ このスレッドは過去ログ倉庫に格納されています