首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android警报管理器崩溃-运行时异常,线程/异步问题

Android警报管理器崩溃-运行时异常,线程/异步问题
EN

Stack Overflow用户
提问于 2019-07-13 22:52:01
回答 1查看 1.3K关注 0票数 1

打电话时:

代码语言:javascript
运行
复制
await AndroidAlarmManager.oneShot(Duration(seconds: 1), 17, callback)

在我的timer类中,具有回调函数,类似于:

代码语言:javascript
运行
复制
  static void alarmCallback(){
    print('>>>>>>>>>>>>>>>>>>>> ALARM CALLBACK <<<<<<<<<<<<<<<<< ');
  }

我有错误:

代码语言:javascript
运行
复制
E/AndroidRuntime( 9115): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime( 9115): Process: com.myapp, PID: 9115
E/AndroidRuntime( 9115): java.lang.RuntimeException: An error occurred while executing doInBackground()
E/AndroidRuntime( 9115):    at android.os.AsyncTask$3.done(AsyncTask.java:354)
E/AndroidRuntime( 9115):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
E/AndroidRuntime( 9115):    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
E/AndroidRuntime( 9115):    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
E/AndroidRuntime( 9115):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/AndroidRuntime( 9115):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/AndroidRuntime( 9115):    at java.lang.Thread.run(Thread.java:764)
E/AndroidRuntime( 9115): Caused by: java.lang.RuntimeException: Methods marked with @UiThread must be executed on the main thread. Current thread: AsyncTask #2
E/AndroidRuntime( 9115):    at io.flutter.embedding.engine.FlutterJNI.ensureRunningOnMainThread(FlutterJNI.java:794)
E/AndroidRuntime( 9115):    at io.flutter.embedding.engine.FlutterJNI.dispatchPlatformMessage(FlutterJNI.java:684)
E/AndroidRuntime( 9115):    at io.flutter.embedding.engine.dart.DartMessenger.send(DartMessenger.java:80)
E/AndroidRuntime( 9115):    at io.flutter.embedding.engine.dart.DartExecutor.send(DartExecutor.java:189)
E/AndroidRuntime( 9115):    at io.flutter.view.FlutterNativeView.send(FlutterNativeView.java:155)
E/AndroidRuntime( 9115):    at io.flutter.plugin.common.MethodChannel.invokeMethod(MethodChannel.java:98)
E/AndroidRuntime( 9115):    at io.flutter.plugin.common.MethodChannel.invokeMethod(MethodChannel.java:84)
E/AndroidRuntime( 9115):    at io.flutter.plugins.androidalarmmanager.AlarmService.invokeCallbackDispatcher(AlarmService.java:170)
E/AndroidRuntime( 9115):    at io.flutter.plugins.androidalarmmanager.AlarmService.onHandleWork(AlarmService.java:151)
E/AndroidRuntime( 9115):    at androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:392)
E/AndroidRuntime( 9115):    at androidx.core.app.JobIntentService$CommandProcessor.doInBackground(JobIntentService.java:383)
E/AndroidRuntime( 9115):    at android.os.AsyncTask$2.call(AsyncTask.java:333)
E/AndroidRuntime( 9115):    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
E/AndroidRuntime( 9115):    ... 3 more
D/ViewRootImpl@c3ee092[MainActivity]( 9115): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager( 9115): prepareNavigationBarInfo() DecorView@360043a[MainActivity]
D/InputMethodManager( 9115): getNavigationBarColor() -855310
I/Process ( 9115): Sending signal. PID: 9115 SIG: 9
Lost connection to device.

我实现了android_alarm_manager,就像在经理的正式文档中一样

  • 添加了显示的权限、服务和接收
代码语言:javascript
运行
复制
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
代码语言:javascript
运行
复制
        <service
            android:name="io.flutter.plugins.androidalarmmanager.AlarmService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="false"/>
        <receiver
            android:name="io.flutter.plugins.androidalarmmanager.AlarmBroadcastReceiver"
            android:exported="false"/>
        <receiver
            android:name="io.flutter.plugins.androidalarmmanager.RebootBroadcastReceiver"
            android:enabled="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>
  • 在应用程序午餐时调用AndroidAlarmManager.initialize();
  • 使用新类完成的PluginRegistrant (在清单中与应用程序名称相同)
代码语言:javascript
运行
复制
<application
        android:name=".Application"
代码语言:javascript
运行
复制
public class Application extends FlutterApplication implements PluginRegistrantCallback {
    @Override
    public void onCreate() {
        super.onCreate();
        AlarmService.setPluginRegistrant(this);
    }

    @Override
    public void registerWith(PluginRegistry registry) {
        GeneratedPluginRegistrant.registerWith(registry);
    }
}

警报已经初始化--在调用oneShot()之前:

代码语言:javascript
运行
复制
I/AlarmService( 9115): Starting AlarmService...
I/AlarmService( 9115): AlarmService started!

我已经在寻找这个错误,例如:

颤振Android报警管理器不工作

或者在这里:

Android警报管理器没有为颤振项目应用程序工作

EN

回答 1

Stack Overflow用户

发布于 2022-06-17 10:50:02

如果在await AndroidAlarmManager.initialize();之前调用runApp(),并且引发运行时错误,则在初始化之前添加WidgetsFlutterBinding.ensureInitialized();

代码语言:javascript
运行
复制
main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await AndroidAlarmManager.initialize();
  runApp(...);
}

另外,使用加号而不是android_alarm_manager,因为它已经被废弃了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57023369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档