在Android中从服务使用SQLite数据库

5
我想了解以下是否可能。我想要一个能够对数据库进行更改的活动和服务,一旦活动停止运行,服务是否仍能访问和更改数据库内容?
我知道服务在活动关闭后可以独立运行,但不确定数据库访问是否仍然能够继续?

1
在Android中从服务访问数据库没有问题。 - Martín Alcubierre
您可以随时从服务中访问数据库,无需强制运行应用程序。 - GrIsHu
1
你有没有搜索 - MysticMagicϡ
是的,这是可能的。它不需要用户界面,可以在后台运行。 - Sagar Trehan
@FlamePrincessϡ 是的,我搜索过了,我认为这里被忽略的更重要的问题是:即使应用程序已关闭和终止,服务能否继续使用数据库? - Wihan Fourie
当然。请检查我的答案。 - MysticMagicϡ
2个回答

14

是的,你可以在Service中使用sqlite数据库,即使应用程序转到后台或者使用最近应用列表中的滑动关闭应用程序的功能进行杀死。

我创建了一个非常简单的演示demo

它只是一个空表的数据库。我每10秒钟在Service中获取该表是否包含任何记录。即使应用程序在后台运行或者被杀死,它仍然会给我一个toast消息。

@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>

希望这能有所帮助。:)


对我很有效,感谢出色的贡献。 - Codelover

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接