Skip to content
This repository has been archived by the owner on Apr 12, 2023. It is now read-only.

LogPeriodicDeleteServiceのコンストラクタで例外発生 #1044

Open
keiji opened this issue Jun 18, 2022 · 5 comments · May be fixed by #644
Open

LogPeriodicDeleteServiceのコンストラクタで例外発生 #1044

keiji opened this issue Jun 18, 2022 · 5 comments · May be fixed by #644
Labels
bug バグ。本来あるべき動作をしていないもの confirmed 開発内部管理用
Projects

Comments

@keiji
Copy link
Collaborator

keiji commented Jun 18, 2022

不具合の内容 / Describe the bug

Google Play Consoleに表示されているクラッシュ。
前のバージョンから発生していたけど、v2.0.1でApiExceptionをケアしたのでこっちが目立ってきた。

android.runtime.JavaProxyThrowable: at System.Globalization.DateTimeFormatInfo.set_Calendar (System.Globalization.Calendar value) [0x00142] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.Globalization.DateTimeFormatInfo..ctor (System.Globalization.CultureData cultureData, System.Globalization.Calendar cal) [0x00022] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.Globalization.CultureInfo.get_DateTimeFormat () [0x00042] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.Globalization.CultureInfo.GetFormat (System.Type formatType) [0x0002f] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.Globalization.DateTimeFormatInfo.get_CurrentInfo () [0x0001c] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.Globalization.DateTimeFormatInfo.GetInstance (System.IFormatProvider provider) [0x00049] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.DateTimeFormat.TryFormat (System.DateTime dateTime, System.Span`1[T] destination, System.Int32& charsWritten, System.ReadOnlySpan`1[T] format, System.IFormatProvider provider, System.TimeSpan offset) [0x00047] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.DateTimeOffset.TryFormat (System.Span`1[T] destination, System.Int32& charsWritten, System.ReadOnlySpan`1[T] format, System.IFormatProvider formatProvider) [0x00011] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.Text.StringBuilder.AppendFormatHelper (System.IFormatProvider provider, System.String format, System.ParamsArray args) [0x00308] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.String.FormatHelper (System.IFormatProvider provider, System.String format, System.ParamsArray args) [0x00023] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at System.String.Format (System.String format, System.Object arg0) [0x00008] in <55ae12eecc7d4a158feb1dcddf442b64>:0
at Covid19Radar.Droid.Services.Logs.LogPeriodicDeleteService.Init () [0x00028] in <9ae07e8924504272817d360be0536ad6>:0
at Covid19Radar.App.OnStart () [0x0000b] in <f3fd8a68d9cb4d8494931c2b66dcea82>:0
at Xamarin.Forms.Application.SendStart () [0x00000] in <361de4fd2138410a8d727d37bccf8e01>:0
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnStateChanged () [0x0001b] in <744976dfeeb14f478d00a95d5a450b39>:0
at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnStart () [0x00046] in <744976dfeeb14f478d00a95d5a450b39>:0
at Android.App.Activity.n_OnStart (System.IntPtr jnienv, System.IntPtr native__this) [0x00008] in <f9aa911b5cd84ab48476e02741e032ff>:0
at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.16(intptr,intptr)
  at crc643f46942d9dd1fff9.FormsAppCompatActivity.n_onStart (Native Method)
  at crc643f46942d9dd1fff9.FormsAppCompatActivity.onStart (FormsAppCompatActivity.java:128)
  at android.app.Instrumentation.callActivityOnStart (Instrumentation.java:1433)
  at android.app.Activity.performStart (Activity.java:7986)
  at android.app.ActivityThread.handleStartActivity (ActivityThread.java:3677)
  at android.app.servertransaction.TransactionExecutor.performLifecycleSequence (TransactionExecutor.java:221)
  at android.app.servertransaction.TransactionExecutor.cycleToPath (TransactionExecutor.java:201)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:173)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2267)
  at android.os.Handler.dispatchMessage (Handler.java:107)
  at android.os.Looper.loop (Looper.java:237)
  at android.app.ActivityThread.main (ActivityThread.java:8167)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:496)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1100)

再現手順 / Steps to reproduce

手元で発生したことがないので不明だけど、FormsAppCompatActivityがあるのでUIが起動されてLogPeriodicDeleteServiceが初期化されるところに何かありそう。

期待される挙動 / Expected behavior

例外が発生しない。

動作環境 / Environments

  • デバイス:Android端末複数で発生していて、これという機種依存傾向は見られない。
  • OS:Android 12, 11, 10とくにバージョンに依存していると言うことはなさそう
  • バージョン:v2.0.1

その他 / Additional context


Internal IDs: Bug 7545

@keiji keiji added bug バグ。本来あるべき動作をしていないもの waiting-for-confirmation 関係者に確認中のもの labels Jun 18, 2022
@keiji keiji added this to To do in v2.1.0 Jun 18, 2022
@b-wind
Copy link

b-wind commented Jun 18, 2022

Log 出力時に暗黙の String.Format() が走ってそこで例外が出ているようにも見えます。

loggerService.Info($"Next scheduled time: {DateTimeOffset.FromUnixTimeMilliseconds(nextScheduledTime).ToOffset(new TimeSpan(9, 0, 0))}");

@keiji
Copy link
Collaborator Author

keiji commented Jun 19, 2022

LogPeriodicDeleteServiceはAlarmManagerからWorkManagerを使った実装に移行する予定なので、その一環で解決しそうな気はしますね。
#150

一方で、当該箇所でなぜエラーが起きているのかは把握しておきたい気はします。この処理をDateTimeUtilityに書き換えれば発生しない。むしろ暗黙のString.Formatを止めて明示的にISO8601でフォーマットするようにして解決するものか。

@b-wind
Copy link

b-wind commented Jun 19, 2022

あくまで該当部分のコードとStackTraceからの推測ですが。

DateTimeOffset を文字列化する際に現在のCultureInfoから日付書式情報を取得しようとして例外が発生しているように見えます。
参考情報としてアラビア語設定で似た様なStackTraceが得られますが、エラーの内容が少し違うのが気になります。

Covid-19Radar/Covid19Radar#493

@b-wind
Copy link

b-wind commented Jun 19, 2022

該当部分はログの出力なので、CultureInfo を固定にするなりフォーマットを指定するなりする方が良いとは思いますが、
言語環境によって DateTime.ToString が失敗するようだと影響範囲は結構大きくなりそうなのが気になります。

@b-wind
Copy link

b-wind commented Jun 19, 2022

xamarin/Xamarin.Forms#4037 (comment)

Issue still exists also on Android. On iOS its very easy to reproduce by setting the "Region" to Thai (not the language).

タイ仏教暦と言う物があるらしい。(日本語圏における和暦のような物)
https://docs.microsoft.com/ja-jp/dotnet/api/system.globalization.thaibuddhistcalendar?view=net-6.0

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug バグ。本来あるべき動作をしていないもの confirmed 開発内部管理用
Projects
v2.1.0
To do
Development

Successfully merging a pull request may close this issue.

3 participants