我希望在我的应用程序中按下按钮时启动服务。
但是,此服务将需要在后台运行并维护SQLiteConnection对象,而无需关闭/重新启动。
我将需要访问服务中的功能,这些功能将使用liteSync查询通过网络保存在服务器上的数据库。
我尝试过的;
<service
android:name=".NetworkStuff.Server"
android:enabled="true"
android:exported="true"
android:stopWithTask="false"></service>
我尝试创建和启动服务,但是当我切换活动时,Service对象被破坏。 我尝试使用其他维护SQLiteConnection对象的方法无效,例如以下代码。
public class MyApplication extends Application{
private SQLiteConnection data;
public SQLiteConnection getData() {
return data;
}
public void setData(SQLiteConnection data) {
this.data = data;
}
我能够正确使用SQLiteConnection对象的唯一方法是在一个活动中进行所有操作(插入,选择,更新,删除)。 因此,从那以后,我开始研究运行包含以上所有查询功能的并发应用程序(永远不会关闭),然后客户端应用程序将调用这些功能,甚至不需要查看SQLiteConnection对象。 从那时起,我被带到一个后台服务,正是这样做的。
我已经看过并尝试过的所有示例似乎都没有在我的应用程序之外运行(我无法通过android设置在“运行服务”中看到它们)
How to call methods of a Service from activity?
https://github.com/MysticMagic/ServiceAndSqlite
如何启动可以处理前面提到的服务类而不必关闭/重新启动可以从应用程序访问的服务类?
-回复评论-
我可以与数据库进行通信,但是可以,我想要一个持续运行的服务,该服务将与服务器上托管的数据库进行通信。 更多信息; io.liteglue.SQLiteConnection; 我正在使用一个名为litesync的库,我所需要的只是一个SQliteConnection对象,该对象由持续运行的服务维护。该服务将需要执行语句(只需运行以下功能)
public ArrayList<String> getData(String statement) {
ArrayList<String> results = new ArrayList<>();
try {
SQLiteStatement mystatement;
try {
mystatement = mydbc.prepareStatement(statement);
} catch (SQLException ex) {
return results;
}
while (mystatement.step()) {
results.add(mystatement.getColumnTextNativeString(0));
}
mystatement.dispose();
}
catch (SQLException ex) {
return results;
}
return results;
}
这里的主要目标是使用相同的SQLiteConnection对象(该对象保存服务器数据库的地址)
我已经能够运行我需要的所有功能,但是它会随机断开并在主要部分停止更新。因此,我正在寻找一个单一的连续后台服务,该服务将处理对SQLiteConnection对象的所有调用,该对象永远不会关闭并且在一个类中起作用。
答案 0 :(得分:1)
您必须创建一个IntentService(具有自己的线程),该进程驻留在一个单独的进程中(我认为此步骤可以是可选的,但我建议让它驻留在其自己的进程中),然后使用“ AIDL inter -过程通信技术”以在活动/应用程序与该服务之间进行通信。这里不可能编写所有代码,但我会给您一些提示:
调试(使用Android Studio中的断点)一个单独的过程可能很困难,因此我建议在同一过程中完成所有工作,然后仅在完成所有工作后才切换到单独。