首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用程序处于后台时,Gimbal PlaceEventListener Api可用性?

当应用程序处于后台时,Gimbal PlaceEventListener Api可用性?
EN

Stack Overflow用户
提问于 2016-04-13 09:08:12
回答 1查看 336关注 0票数 1

在我的安卓应用程序中,我正在使用万向节 SDK作为geofence功能。他们提供的示例代码让我大吃一惊。示例代码如下所示:包com.gimbal.hello_gimbal_android;

代码语言:javascript
复制
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();
    }

}

他们的示例应用程序github链接。

现在他们的place侦听器实现让我大吃一惊。我期待一个暂挂的服务意图或某种类型的广播来收听这些场所事件,因为大多数这样的库都会通知应用程序。很明显也没问题。因为即使app处于死状态,也应该触发这样的事件。但是在这里,PlaceEventListener只是一个抽象类,我们正在使用新的运算符创建一个实例,并提供抽象方法的不完全功能。

因此,当我的活动被破坏时,它们的SDK不应该在onVisitStart()和PlaceEventListener ()方法中返回,因为placeEventListener实例应该被销毁或空。

我担心的是

  1. Gimabl防止仅为保存placeEventListner而从垃圾收集器中销毁主活动类实例。 举个例子?如果是这样的话,我认为这是一个糟糕的设计,就好像我们可以从这么多的活动中使用新的placeEventListner一样,所有这些都会阻止GC。
  2. 此外,运行后台服务只是为了收听这些事件,对我来说似乎不太好。他们的SDK应该让我的android应用程序的某些组件诞生(例如,通过广播place事件来触发某些服务或调用广播接收器)。

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

EN

回答 1

Stack Overflow用户

发布于 2016-04-13 09:29:40

为什么不直接将侦听器放入服务中,并在活动中看到传入事件时通知它?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36593610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档