【问题标题】:Trouble accessing class field values inside a JobIntentService无法访问 JobIntentService 中的类字段值
【发布时间】:2018-08-09 04:34:18
【问题描述】:

我正在尝试在 Android 上使用 JobIntentService,但无法访问 onHandleWork 方法中的类字段。我的discoverable 字段在onHandleWork 方法中似乎总是为空。

这是我的 JobIntentService 类:

import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v4.app.JobIntentService;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import io.hypertrack.smart_scheduler.Job;
import io.hypertrack.smart_scheduler.SmartScheduler;

public class NetworkCheckService extends JobIntentService {
  private static final int jobId = 1;

  private Settings settings;
  private NetworkInformation networkInfo;
  private Networks networks;
  private Discoverable discoverable;

  {
    Logger.addLogAdapter(new AndroidLogAdapter());
  }

  // Needs an empty constructor for some reason.
  public NetworkCheckService() {
  }

  public NetworkCheckService(Context context) {
    this.settings = new Settings(context);
    this.networkInfo = new NetworkInformation(context);
    this.networks = new Networks(context, networkInfo);
    this.discoverable = new Discoverable(settings, networks);
  }

  private Discoverable getDiscoverable() {
    return discoverable;
  }

  static void enqueueWork(Context context, Intent work) {
    enqueueWork(context, NetworkCheckService.class, jobId, work);
  }

  public void onHandleWork(@NonNull Intent intent) {
    Logger.d(discoverable); // discoverable is null
    Discoverable foo = getDiscoverable(); // foo is null
  }

}

我的主要活动课:

public class MainActivity extends AppCompatActivity {

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

    NetworkCheckService networkCheckService = new NetworkCheckService(this);
    networkCheckService.enqueueWork(this, new Intent());
  }

}

【问题讨论】:

  • Discoverable 类在做什么?我认为discoverable = new Discoverable(settings, networks) 应该在onHandleWork 如果做任何长期工作

标签: java android jobintentservice


【解决方案1】:

我们不应该在服务类中创建任何构造函数。它由android系统完成。这就是您的成员变量变为null 的原因。最好在 onHandleWork 方法中初始化它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多