我想知道以下是否可行。我希望有一个活动和服务都对数据库进行更改,一旦活动停止运行,服务是否仍然能够访问和更改数据库的内容?
我知道服务一旦关闭就可以独立于活动运行,但不确定数据库访问是否仍然可以继续?
答案 0 :(得分:9)
是的,你可以在你的服务中使用sqlite数据库,即使应用程序转到后台,或者使用从最近的应用程序列表中滑动来杀死应用程序。
我创建了一个非常简单的demo。
它只是一个带有空表的数据库。而且我每隔10秒就会收到一个表是否包含任何记录。即使应用程序在后台,它也会给我吐司消息,或者它被杀死。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final Handler mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
MyDBHelper myDBHelper = new MyDBHelper(getApplicationContext());
boolean isInfoAvailable = myDBHelper.isAnyInfoAvailable(getApplicationContext());
Toast.makeText(getApplicationContext(), String.valueOf(isInfoAvailable), Toast.LENGTH_LONG).show();
mHandler.postDelayed(mRunnable, 10 * 1000);
}
};
mHandler.postDelayed(mRunnable, 10 * 1000);
return super.onStartCommand(intent, flags, startId);
}
您需要确保的是:
服务应该在后台运行。
在您的清单文件中,使用标记android:stopWithTask="false"
进行服务。
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"
android:stopWithTask="false">
</service>
希望这会有所帮助。 :)
答案 1 :(得分:0)
完全可以让您的服务访问数据库 - 尝试查看How to use SQLite from Services in Android?