我最近加入了一家新公司,并接手了一个已经持续多年的项目。这张图的不幸问题是一些代码维护得很差,对我来说描述当前情况的最简单方法是当前的实现过于复杂。
我目前正在尝试简化其中一些操作(编码),以提高整个应用程序的性能和响应能力。我已尽力不要改变太多,因为尽管这很诱人,但此时会涉及太多工作。
我正在努力开发下一个版本,但我必须首先解决一些关键问题。
其中一个问题是 Android 服务的使用。目前,至少根据以前的开发人员所做的,他们试图从头开始创建他们的服务,老实说,这没有意义,因为 Android 本身已经提供了一种方法来做到这一点。我想也许使用内置的后台服务就足够了。
我已经好几年没有积极参与 Android 项目了,但我仍然记得一些事情。我想弄清楚的一件事是,是否可以创建一个Android服务类,然后让它在后台管理不同类型的操作?由于保密协议,我可以在这里使用真实的代码,但我可以给你一个例子:
// UserAccountService - Just an example from the docs.
public class UserAccountService extends Service {
private Looper serviceLooper;
private ServiceHandler serviceHandler
private final class ServiceHandler extends Handler {
public ServiceHandler (Looper looper) {
super(looper);
}
@Override
public void handleMessage (Message msg) {
try {
// do some work here
} catch (InterruptedException ex) {
}
stopSelf(msg.arg1);
}
}
@Override
public void onCreate() {
// same as the example from developer.android.com/develop/background-work/services#java
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
}
@Override
public IBinder onBind (Intent intent) {
}
@Override
public void onDestroy() {
}
/**
* Below I would have all the functions for performing some of the standard UserAccount related
* operations.
*/
protected bool isAnonymousUserOnline() {
}
protected void autoLogin() {
}
protected void logout() {
}
protected User getUserById() {
}
protected User getAnonymousUser() {
}
}
基于上面的简要概述和示例,我想知道,我可以通过意图对象传递值吗?类似于在活动和片段之间导航?查看在线文档中提供的编码示例,我认为这是可能的。
然后,根据可以从意图(在 UserAccountService 内)收集的值,我可以执行 switch-case 块来过滤传递的值,然后在 try {} 块中运行不同的用户帐户操作.
最后,在示例中的不同重写方法中,我可以肯定地理解onCreate的用途。我很好奇的是另外两个,比如
onStartCommand()
和onBind()
。我们通常应该在这些函数中放入什么?
实现此 UserAccountService 的最佳方式是什么?有什么我需要注意的潜在陷阱吗?
例如,在我的应用程序的通信BluetoothLe部分中,通信是使用绑定服务执行的,并使用广播将信息从服务发送到活动。
请参阅 https://developer.android.com/develop/connectivity/bluetooth/ble/connect-gatt-server。
要将信息从活动发送到服务,我只需调用服务函数即可。 例如。通知服务活动是活动还是暂停
在活动中
bluetoothService!!.activityInPausedState()
bluetoothService!!.activityInActiveState()
服务中
var activityIsPaused:Boolean = false
fun activityInPausedState() {
activityIsPaused = true
}
fun activityInActiveState() {
activityIsPaused = false
}
希望对你有一点帮助