トップページ > 記事閲覧
Android版
名前:ギウ 日時: 2017/07/04 21:22

お世話になっております。 原因は分からないのですが、Releaseモードで何時間か自動で動かしてると強制終了になることがあります。 ※フリーズではなく、アプリが終了させられてる感じです。 ※Debug版でも出るかどうかは分かりません。 ※今までに3回くらい強制終了になりました。 同じゲームのWindows版ではその症状は出ないです。 もちろんゲーム側の問題ということも考えられるのですが、一応ご報告ということで。
メンテ

Page: 1 | 2 |

Re: Android版 ( No.10 )
名前:ギウ 日時:2017/07/08 05:57

ご対応有難うございます! >もしかしたらAPI呼び出しでエラーが発生した際に何かメモリリーク的なものが発生してそれが蓄積されているのかもしれません なるほど、それな感じがします。 最新版の方、現在Log無しで試し中です。 また書き込みます。
メンテ
Re: Android版 ( No.11 )
名前:ギウ 日時:2017/07/08 20:11

大丈夫かなと安心してたら、4、5時間後に止まりました; しかもLog.txtの無しの方なので、詳しくは分かりません。。 今、Log.txtの状態で数時間やってますが、まだエラーは出力されてないです。 一先ず状況報告ということで。 P.S ゲーム側で、同じ音を鳴らさないような処理を加えれば、もっと延命できるかなとは思いますが、まずはこの状態でデバッグしておきます。
メンテ
Re: Android版 ( No.12 )
名前:ギウ(解決) 日時:2017/07/08 21:54

Log.txtが有効だと、止まったりエラーが出力されたりはしないのかもしれません。 試しに、効果音鳴らしまくるプログラムも実行してみましたが大丈夫でした。 なのでこの件は一先ず大丈夫ということにして(すみません;)、ゲーム側の音処理が少なくなるように調整しておこうと思います。 もしまた止まった時はお知らせします! ご対応有難うございました。
メンテ
Re: Android版 ( No.13 )
名前:管理人(解決) 日時:2017/07/10 00:00

お試しいただきありがとうございます すみません、駄目でしたか… ログが有効だと止まらないのは、謎です… > もしまた止まった時はお知らせします! よろしくお願いします m(_ _;m あと、今更で申し訳ありません No.3 のお話ですが > こちらの処理は、 > 読み込む際、データが有る時は、 > StopSoundMem > DeleteSoundMem > を行った後、 > LoadSoundMemByMemImage > を実行してます。 こちらについてもう少し詳しく教えていただけないでしょうか 「読み込む際、データが有る時」とは、どのような状況でしょうか? 再生処理を配列のようなもので管理していて、サウンドデータを読み込もうとした スロットに既に有効なサウンドハンドルが存在する場合、 StopSoundMem, DeleteSoundMem を行うということでしょうか? > 試しに、効果音鳴らしまくるプログラムも実行してみましたが大丈夫でした。 お試しされたのは、No.3 のお話と同じような方式( データが既にあったら StopSoundMem, DeleteSoundMem を行った後 LoadSoundMemByMemImage を実行する )で 効果音を鳴らしまくられたのでしょうか?
メンテ
Re: Android版 ( No.14 )
名前:ギウ 日時:2017/07/10 22:02

>再生処理を配列のようなもので管理していて、サウンドデータを読み込もうとした >スロットに既に有効なサウンドハンドルが存在する場合、 >StopSoundMem, DeleteSoundMem を行うということでしょうか? そうです。 配列にサウンドハンドルを入れておいて、それが0以外なら、StopSoundMem, DeleteSoundMemを実行した後、読み込む感じです。 なので、再生中かどうかに関係なく、StopSoundMemを呼んでます。 >StopSoundMem, DeleteSoundMem を行った後 LoadSoundMemByMemImage を実行する )で >効果音を鳴らしまくられたのでしょうか? それも使いましたが(1フレームに2回くらい)、主に読み込み済みのを PlaySoundMem しまくりました。
メンテ
Re: Android版 ( No.15 )
名前:管理人 日時:2017/07/11 02:40

ご返答ありがとうございます 教えていただいたご情報を元に PlaySoundMem しまくるテストプログラムを組んでみたところ、 手元の環境でもエラーが発生しました! 手元の環境ではログが無効でもエラーが発生しました また、まだはっきりとは確認できていませんが、StopSoundMem, DeleteSoundMem を使用せず PlaySoundMem を実行するだけでもエラーが発生した可能性も…( エラーになったタイミングを 目撃できていないので、まだ確証は得られていません… ) 一度のテストに時間が掛かるので、修正には時間が掛かるかもしれませんが、修正ができたら お伝えします m(_ _;m
メンテ
Re: Android版 ( No.16 )
名前:ギウ 日時:2017/07/11 08:32

おお! 再現できたとのことで良かったです。 よろしくお願いいたします。
メンテ
Re: Android版 ( No.17 )
名前:ギウ 日時:2017/07/11 11:50

別件でGoogleのサポートの方とやり取りをしてるのですが、 色々あってAPIレベルを18以上にすることになりました。 APIレベルがどういうものかイマイチ分かってないのですが(DirectXでいうバージョン番号みたいな感じ?)、 もし昔のAPIのバグが直るとかなら、今回のも関係するのかなと思いましたので一応書きこんでおきます。 尚、APIレベルの変更方法は、AndroidManifest.xml 内を、 ↓な感じにすれば18以上になるようです。 <uses-sdk android:minSdkVersion="18" android:targetSdkVersion="19"/>
メンテ
Re: Android版 ( No.18 )
名前:ギウ 日時:2017/07/11 13:47

APIレベルについて、 「古いAPIのバグが直るというわけではなく、単純に配信対象が上位のAPIになるだけですので、バグ自体はそのまま残ります」 とのことでした; 残念。
メンテ
Re: Android版 ( No.19 )
名前:管理人 日時:2017/07/13 01:29

未だ原因究明中です( StopSoundMem, DeleteSoundMem, LoadSoundMemByMemImage の処理を行うと 比較的すぐにエラー終了して、PlaySoundMem だけを使用すると数時間はエラー終了しないということが 分かりました、現在原因かもしれない箇所を少し変更して実行テスト中です… ) > APIレベルがどういうものかイマイチ分かってないのですが(DirectXでいうバージョン番号みたいな感じ?)、 > > 「古いAPIのバグが直るというわけではなく、単純に配信対象が上位のAPIになるだけですので、バグ自体はそのまま残ります」 > とのことでした; 残念。 ご情報ありがとうございます APIレベルが上がると使用できるAPIや引数のタイプが増えたり仕様が変わったりという感じです Windowsで言うなら『UpdateLayeredWindow という Win32 API は Windows2000 以降であれば使用できます』みたいな感じです DirectX はバージョンが上がると使用する API も全部変わってしまうので、DirectX では例えることが できないかもしれません…
メンテ
Re: Android版 ( No.20 )
名前:ギウ 日時:2017/07/13 18:24

あ、確かにDirectXはまた違いますね。 >未だ原因究明中です( StopSoundMem, DeleteSoundMem, LoadSoundMemByMemImage の処理を行うと なるほど、こっちの方が止まりやすいんですね。 では一先ずこちらは、「なるべく予め読み込んでおく」感じで調整しておきます。 >現在原因かもしれない箇所を少し変更して実行テスト中です… おお。止まりませんように!
メンテ
Re: Android版 ( No.21 )
名前:管理人 日時:2017/07/14 01:40

> おお。止まりませんように! 4〜5時間は大丈夫だったのですが、朝起動したまま出かけて、夜帰ってきたら終了していました ただ、他の電子機器も画面がONになっていたりと何やら違和感があって、停電か何か発生した可能性があります なのでエラー終了かどうかは分かりませんでした… そんなわけで今しがたテスト実行を再度開始したところなので、結果は明日に持ち越しとなりました (_ _;;
メンテ
Re: Android版 ( No.22 )
名前:ギウ 日時:2017/07/15 08:18

如何でしょうか。 こちらは昨日、1回止まりました。(LOG無し。延命効果は出てる感じしてます) 私の方でも実行チェックしますので、必要でしたら途中状態でもアップしてくださいませ^^ -- あとPS系の方にも書き込みしました。
メンテ
Re: Android版 ( No.23 )
名前:管理人 日時:2017/07/15 14:53

ご情報ありがとうございます こちらも再テストでも止まってしまい、現在更に処理を変更して再度テスト中です ( StopSoundMem, DeleteSoundMem, LoadSoundMemByMemImage を行うテストで2時間弱問題なく 動作しているので、今度こそ直せたかもしれません ) 結果が出ましたら追記します > あとPS系の方にも書き込みしました。 すみません、昨日は疲れていたので帰宅後ご返信することができませんでした 後ほどご返信しますので少々お待ちください
メンテ
Re: Android版 ( No.24 )
名前:管理人 日時:2017/07/16 01:00

とりあえず11時間経過してもエラー終了しないことが確認できました このまま20時間くらいまでテストは続けますが、直っている可能性が高いので よろしければギウさんもお試しになってみてください m(_ _)m http://dxlib.o.oo7.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
メンテ
Re: Android版 ( No.25 )
名前:ギウ(解決) 日時:2017/07/16 08:15

お疲れ様です! DLしました。 こちらでも普通にまわしてみます。 (もし何かあればまた書き込みます) 有難うございました。
メンテ
Re: Android版 ( No.26 )
名前:管理人(解決) 日時:2017/07/16 22:28

> こちらでも普通にまわしてみます。 > (もし何かあればまた書き込みます) ありがとうございます、よろしくお願いします m(_ _)m とりあえず手元では32時間経過してもエラー終了しませんでした
メンテ
Re: Android版 ( No.27 )
名前:ギウ(解決) 日時:2017/07/17 07:47

おお。完璧ですね^^ こちらも全く問題ありません。 ではサウンド関連は完全解決ということで! 良かったです。
メンテ
Re: Android版 ( No.28 )
名前:りんご 日時:2018/10/26 11:39

突然失礼致します。 当方趣味でAndroidでゲーム開発をしている者です。 今現在本スレッドと同様の問題を抱えており、ここでは解決しているようなのですが、 OpenSL ESの使い方で誤っていた点、原因は何だったか等差し支えなければ教えていただけないでしょうか。 DXライブラリも見させていただき、レス内容からStopSoundMem等の処理を変更なさった(?)ようですが、内部処理を追うことができませんでしたので、 質問させていただきました。 差し支えない範囲で構いませんので何卒よろしくお願い申し上げます。
メンテ
Re: Android版 ( No.29 )
名前:管理人 日時:2018/10/28 22:20

ご返信が遅くなり申し訳ありません 原因は同時に行ってはいけない処理を同時に行ってしまうという、マルチスレッド処理における初歩的なバグでした なので、クリティカルセクションを使用して処理が衝突しないようにしたところ問題が発生しなくなりました ちなみに当時修正ができたかどうかをテストするために使用していたプログラムは以下の通りです #include "DxLib.h" #include <string.h> #define NUM (16) #define STOPNUM (64) int android_main(void) { int FileHandle ; int StartTime ; int Time ; int PlayCount ; int LoadCount ; int i ; SetOutApplicationLogValidFlag( FALSE ) ; if( DxLib_Init() == -1 ) return -1 ; StartTime = GetNowCount() ; PlayCount = 0 ; LoadCount = 0 ; SetDrawScreen( DX_SCREEN_BACK ) ; int Sound[NUM] = { 0 }; FileHandle = FileRead_fullyLoad( "test.wav" ) ; while( ProcessMessage() == 0 ) { ClearDrawScreen() ; if( GetRand( 100 ) > 20 ) { int ind = GetRand( NUM - 1 ) ; if( Sound[ ind ] == 0 ) { Sound[ ind ] = LoadSoundMemByMemImage( FileRead_fullyLoad_getImage( FileHandle ), FileRead_fullyLoad_getSize( FileHandle ) ) ; LoadCount ++ ; } else { if( GetRand( 100 ) < 40 ) { StopSoundMem( Sound[ ind ] ) ; DeleteSoundMem( Sound[ ind ] ) ; Sound[ ind ] = LoadSoundMemByMemImage( FileRead_fullyLoad_getImage( FileHandle ), FileRead_fullyLoad_getSize( FileHandle ) ) ; LoadCount ++ ; } } PlaySoundMem( Sound[ ind ], DX_PLAYTYPE_BACK ) ; PlayCount ++ ; } Time = GetNowCount() - StartTime ; DrawFormatString( 0, 0, GetColor( 255,255,255 ), "Time %02d:%02d:%02d PlayCount:%d LoadCount:%d", Time / ( 1000 * 60 * 60 ), Time / ( 1000 * 60 ) % 60, Time / 1000 % 60, PlayCount, LoadCount ) ; ScreenFlip() ; } DxLib_End(); return 0; } とりあえず30分ほど実行してみた限りでは強制終了は発生しませんでした よろしければりんごさんの環境では上記プログラムで強制終了が発生してしまうかお試しいただけないでしょうか? m(_ _)m
メンテ

Page: 1 | 2 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存