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

时间:2016-04-13 09:08:13

标签: android service process background gimbal

我在我的Android应用程序中使用Gimbal 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.

现在他们的地方事件监听器实施让我感到惊讶。由于大多数此类库用于通知应用程序,因此我期待服务或某种用于监听这些场所事件的意图广播的未决意图。哪个很明显。因为即使应用程序处于被杀死状态,也应该触发此类事件。 但是这里 PlaceEventListener 只是一个抽象类,我们使用新的运算符创建它的实例,并提供抽象方法的不完整功能。

因此,当我的活动将被破坏时,他们的SDK不会假设能够在 onVisitStart ()和PlaceEventListener()方法中进行回调,因为 placeEventListener 实例应该被销毁或null。

我关心的是

  1. Gimabl SDK可防止破坏主活​​动类实例     垃圾收集器只是为了保持placeEventListner
            实例参考?如果是这样,我认为这是一个糟糕的设计,如果我们可以使用来自这么多活动的新placeEventListner,所有这些都会阻止GC。
  2. 同时运行后台服务只是为了听这些事件 对我来说似乎并不好他们的SDK应该     让我的android应用程序的一些组件生出(例如     通过广播发射一些服务或调用广播接收器     地方活动)。
  3. *编辑:一种可能的方法是在Android应用程序的Application类中实现侦听器接口,但是由于其他一些原因我试图避免它。 那么,我想在哪里实现呢?

1 个答案:

答案 0 :(得分:1)

为什么不将听众直接放入服务中,并在收到有关收到的事件时通知您的活动?