如何仅将Application类运行到特定的活动类?

时间:2018-02-25 09:40:11

标签: java android beacon

enter image description here

与我的算法一样,如何使Application.java仅在主菜单中运行 至于现在,MyApplication.java会在每个活动上运行。我已经在主菜单上尝试了这个,但没有用。

@Override
    protected void onResume() {
        super.onResume();
        SystemRequirementsChecker.checkWithDefaultDialogs(this);
        beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
            @Override
            public void onServiceReady() {
                beaconManager.startRanging(region);
            }
        });

    }
    @Override
    protected void onPause() {
        super.onPause();
        beaconManager.stopRanging(region);
        finish();
    }

    @Override
    protected void onStart() {
        super.onStart();
        beaconManager.stopRanging(region);
    }

    @Override
    public void onStop(){
        super.onStop();
        beaconManager.stopMonitoring(region);
        beaconManager.stopRanging(region);
        finish();
        System.runFinalizersOnExit(true);
        System.exit(0);
        android.os.Process.killProcess(android.os.Process.myPid());
    }

2 个答案:

答案 0 :(得分:2)

我强烈建议您重温Android app fundamentalsThe Lifecycle Activity,因为看起来您可以了解一些核心Android概念。您还想检查exiting apps on Android is frowned upon

的原因

作为docs sayApplication是用于维护全局应用程序状态的基类,并且在创建应用程序/包的进程之前在任何其他类之前实例化。因此,您不能只是禁用它。

如果我的理解是正确的,您希望表示各种类型的,这表示用户已通过所有初始要求(登录和IMEI检查),现在可以完全访问应用功能。忽略我们可以使用的当代工具,一种非常基本的方法可以是提供主菜单功能的简单类,例如:

class MainMenu {
  private final Context appContext;
  private final BeaconManager manager;

  public MainMenu(@NotNull Context context) {
    appContext = context.getApplicationContext();
    manager = BeaconManager.getBeaconManager(context);
  }

  public void connectBeacon(@NotNull Callback callback) {
    beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
      @Override
      public void onServiceReady() {
        beaconManager.startRanging(region);
        callback.onSuccess(region);
      }
    });
  }

  public void disconnectBeacon(@NotNull Region region) {
    if (manager.isRanging(region)) {
      beaconManager.stopRanging(region);
    }
  }
}
成功登录后,您在MainMenuActivity中创建的

或每个Activity实例的基类。

更好的选择,特别是如果您的应用程序大于几个类,则遵循架构模式。如果您无法确定哪个,可以查看Android Architecture Components。要考虑的另一个有用的模式/技术是Dependency Injection - 使用诸如Dagger2之类的库,您可以利用子组件范围来实现完全分离你好吗。

答案 1 :(得分:1)

基本上你不能在运行应用程序时创建Application Class(即使在backgrand中)。

这是github的概述,介绍ApplicationClass

  

Android中的Application类是Android应用程序中的基类,包含所有其他组件,如活动和服务。在创建应用程序/包的进程时,Application类或Application类的任何子类在任何其他类之前被实例化。

完整描述

github