[英]Android Best way to keep and share data through the app
我正在制作一个运行前台服务的小型 Android 应用程序,该应用程序在收到新 SMS 消息时侦听并通知用户。 当服务启动时,它在 IntentFilter 中使用操作android.provider.Telephony.SMS_RECEIVED
注册BroadcastReceiver
,并在停止时取消注册。 该应用程序还从内部存储的 JSON 文件中获取用户数据以及所选号码列表,以便接收器可以过滤出要通知用户的号码。 我的 MainActivity 有 3 个按钮,启动和停止服务,以及一个设置按钮,该按钮移动到 SettingActivity 显示一些用户信息以及所选数字的列表并允许用户更改它。 我的问题是:在整个应用程序中共享用户数据以便所有活动以及服务和接收器都可以访问它的最佳方式是什么? 我想过并尝试了几种方法:
BroadcastReceiver
因为它已注册为侦听到SMS_RECEIVED
而不是其他广播,即使我创建了一个新的 Intent 并用startBroadcast
广播它user
对象静态化:我尝试将User
设为公共静态,以便在 MainActivity 完成从文件中获取数据后可以被其他类调用,基本上将public static User user
放在 MainActivity 中并由MainActivity.user
调用它MainActivity.user
其他班级的MainActivity.user
,这甚至可以与BroadcastReceiver
一起使用,但我不确定这是否是在整个应用程序中共享数据的正确方法那么实现这一点的正确方法是什么? 请给我一些建议。 提前谢谢你们。
对此,有几点建议:
1 - 您可以在共享首选项中存储您需要的数据,但如果这是个人数据,您希望保密(例如密码、个人身份信息),您可能不想这样做。
2 - 与您在活动中所做的类似,您可以创建一个服务,负责从文件中获取用户数据并保留它直到应用程序被终止,例如 -
public class UserDataStore()
这样你就可以在启动时创建一个 UserDataStore 的实例,然后通过依赖注入将它传递给你的应用程序。 因此,无论您在何处创建处理广播事件的服务,您都可以添加一个 UserDataStore 作为参数,假设您首先创建了 UserDataStore。 例如——
public class BroadcastReceiverService(UserDataStore store)
这种方式也意味着您的 BroadcastReceiverService 更具可测试性,因为您可以模拟 UserDataStore。
例子 -
public class MainActivity() {
UserDataStore store = new UserDataStore()
BroadcastReceiverService broadcastService = new BroadcastReceiverService(store)
}
然后在您的 UserDataStore -
public class UserDataStore() {
// in here you want to get all your info about the user eg username, email etc
String name = ""
init {
User user = getUserInfo()
name = user.name
}
public String getUserName() {
return name
}
}
最后在你的广播接收器中
public class BroadcastReceiverService(UserDataStore store) {
public void receiveMessage(Message msg) {
if(msg.username == store.name) // continue
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.