gpt4 book ai didi

android - 应用程序在后台时 Gimbal PlaceEventListener Api 的可用性?

转载 作者:行者123 更新时间:2023-11-30 01:24:30 26 4
gpt4 key购买 nike

我正在使用 Gimbal我的 Android 应用程序中用于地理围栏功能的 SDK。他们提供的示例代码让我感到惊讶。示例代码如下包 com.gimbal.hello_gimbal_android;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.gimbal.android.CommunicationManager;
import com.gimbal.android.Gimbal;
import com.gimbal.android.PlaceEventListener;
import com.gimbal.android.PlaceManager;
import com.gimbal.android.Visit;


public class MainActivity extends ActionBarActivity {

private PlaceManager placeManager;
private PlaceEventListener placeEventListener;
private ArrayAdapter<String> listAdapter;
private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1);
listView = (ListView) findViewById(R.id.list);
listView.setAdapter(listAdapter);

listAdapter.add("Setting Gimbal API Key");
listAdapter.notifyDataSetChanged();
Gimbal.setApiKey(this.getApplication(), "YOUR_API_KEY_HERE");

placeEventListener = new PlaceEventListener() {
@Override
public void onVisitStart(Visit visit) {
listAdapter.add(String.format("Start Visit for %s", visit.getPlace().getName()));
listAdapter.notifyDataSetChanged();
}

@Override
public void onVisitEnd(Visit visit) {
listAdapter.add(String.format("End Visit for %s", visit.getPlace().getName()));
listAdapter.notifyDataSetChanged();
}
};

placeManager = PlaceManager.getInstance();
placeManager.addListener(placeEventListener);
placeManager.startMonitoring();

CommunicationManager.getInstance().startReceivingCommunications();
}

}

他们的 sample App github link.

现在他们的地方事件监听器实现让我感到惊讶。我期待一个未决的服务 Intent 或某种广播 Intent 来收听这些地方事件,因为大多数此类库都用于通知应用程序。这很明显。因为即使应用程序处于终止状态,也应该触发此类事件。但是这里的 PlaceEventListener 只是一个抽象类,我们正在使用 new Operator 创建它的实例并提供抽象方法的不完整功能。

因此,当我的 Activity 将被销毁时,他们的 SDK 不应该在 onVisitStart() 和 PlaceEventListener () 方法中提供回调,因为 placeEventListener 实例应该被销毁或为空。

我担心的是

  1. Gimabl SDK 防止破坏主活​​动类实例 垃圾收集器只是为了保留 placeEventListner
    实例引用?如果是这样,我认为这是一个糟糕的设计,因为如果我们可以从这么多 Activity 中使用新的 placeEventListner,那么所有这些都将阻止 GC。
  2. 同时运行后台服务只是为了收听这些事件对我来说似乎不太好。他们的SDK应该 使我的 android 应用程序的某些组件诞生(例如 通过广播触发某些服务或调用广播接收器 地点 Activity )。

*编辑:一种可能的方法是在 Android 应用程序的 Application 类中实现监听器接口(interface),但由于其他一些原因,我试图避免它。那么,我应该在哪里实现它?

最佳答案

为什么不将监听器直接放入服务中,并在 Activity 对传入事件可见时通知它?

关于android - 应用程序在后台时 Gimbal PlaceEventListener Api 的可用性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com