2

我有一个相当简单的应用程序,它是用 Clojure 编写的,并希望定期自动执行其中一个功能。我正在尝试使用 AndroidAlarmManager来安排任务。这是我到目前为止所拥有的:

Android 的参考文档在此处输入链接描述

public class HelloIntentService extends IntentService {

  /**
   * A constructor is required, and must call the super IntentService(String)
   * constructor with a name for the worker thread.
   */
  public HelloIntentService() {
      super("HelloIntentService");
  }

  /**
   * The IntentService calls this method from the default worker thread with
   * the intent that started the service. When this method returns, IntentService
   * stops the service, as appropriate.
   */
  @Override
  protected void onHandleIntent(Intent intent) {
      // Normally we would do some work here, like download a file.
      // For our sample, we just sleep for 5 seconds.
      try {
          Thread.sleep(5000);
      } catch (InterruptedException e) {
          // Restore interrupt status.
          Thread.currentThread().interrupt();
      }
  }
}

我自己在 Clojure 中的进步:

(gen-class
 :name adamdavislee.mpd.Service
 :extends android.app.IntentService
 :exposes-methods {IntentService superIntentService}
 :init init
 :prefix service)

(defn service-init []
  (superIntentService "service")
  [[] "service"])
(defn service-onHandleIntent [this i]
  (toast "hi"))

我想我误解了一些微妙的东西;在评估第一个 sexp 之后,符号adamdavislee.mpd.Service未绑定,符号 也未绑定superIntentService

4

2 回答 2

1

将根据阅读您的代码提出一些建议(即不确定这些是否可行)

看起来您可能对 Java 互操作有疑问。您可以在此处查看更多信息。它看起来也:prefix应该是一个字符串。例如

(gen-class
 :name adamdavislee.mpd.Service
 :extends android.app.IntentService
 :exposes-methods {IntentService superIntentService}
 :init init
 :prefix "service-")  ;;---> make this a string and append '-'

(defn service-init []
  (.superIntentService "service");;-> update with prepend dot-notation for Java interop
  [[] "service"])                ;;-> not sure what 'service' is doing here 
                                 ;;   perhaps consider an atom
(defn service-onHandleIntent [this i]
  (.toast "hi"))  ;;=> Not sure where this method is coming from, 
                  ;;   but guessing java interop need here as well

这个例子也可能提供一些有用的见解。希望这可以帮助...

于 2017-10-16T22:52:49.290 回答
0

此代码有效,但只有在添加对gen-class. gen-class只能在编译项目时生成类。

(gen-class
 :name adamdavislee.mpd.Service
 :extends android.app.IntentService
 :init init
 :state state
 :constructors [[] []]
 :prefix service-)
(defn service-init
  []
  [["NameForThread"]
   "NameForThread"])
(defn service-onHandleIntent
  [this i]
  (toast "service started"))
于 2017-10-23T15:29:18.557 回答