NativeScript Android后台服务

时间:2017-01-13 07:40:33

标签: nativescript angular2-nativescript

我正在开发NativeScript android应用程序。我是NativeScript的新手。我想运行后台服务,即定期检查服务并向用户发送通知,即使应用程序未在设备上打开。我按照Nativescript网站的说明 https://www.nativescript.org/blog/using-android-background-services-in-nativescript

但是当我调用setupAlarm函数时,我收到错误无法实例化类com.tns.notifications.NotificationIntentService;没有空构造函数

请帮帮我。我在下面提供完整的例外情况

The application crashed because of an uncaught exception. You can look at "stackTrace" or "nativeException" for more detailed information about the exception.
An uncaught Exception occurred on "main" thread.
java.lang.RuntimeException: Unable to instantiate service com.tns.notifications.NotificationIntentService: java.lang.InstantiationException: can't instantiate class com.tns.notifications.NotificationIntentService; no empty constructor
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2543)
    at android.app.ActivityThread.access$1800(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5001)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.InstantiationException: can't instantiate class com.tns.notifications.NotificationIntentService; no empty constructor
    at java.lang.Class.newInstanceImpl(Native Method)
    at java.lang.Class.newInstance(Class.java:1208)
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:2540)
    ... 10 more

3 个答案:

答案 0 :(得分:2)

要解决no empty constructor问题,您可以像这样使用nativescript-android-utils

安装:

npm install nativescript-android-utils --save

在你的代码中:

com.pip3r4o.android.app.IntentService.extend("com.mypackage.MyClass", {
    onHandleIntent: function(){}
});

现在,com.mypackage.MyClass将有一个空的构造函数。

答案 1 :(得分:1)

我从这里找到了工作的nativescript android后台服务项目 https://github.com/NativeScript/sample-android-background-services

答案 2 :(得分:0)

最新版本的Nativescript允许您使用workers for multithreading applications。我相信这是你应该使用的。在您提供的教程中,他们还提到将来使用Web worker。

  

下一步是什么

     

在即将发布的版本中,我们将推出对Web的支持   工作者在NativeScript中具有功能,允许您在一个中执行代码   后台线程,全部通过Angular / JavaScript。

希望它有所帮助。