gpt4 book ai didi

java - Android O - 后台服务限制未按预期工作

转载 作者:行者123 更新时间:2023-12-02 13:19:56 24 4
gpt4 key购买 nike

我只是根据 Android O 背景限制测试我现有的 Android 应用程序。

在测试中,我发现了一个奇怪的行为。所以基本上在我的应用程序中,我正在使用后台服务,并且我在第一个 Activity 中启动它。

所以现在的问题是一旦 Activity 和后台服务启动,我将使用后退按钮关闭我的 Activity 。因此,根据服务概念,它一直在后台运行。

大约 1 分钟后,后台服务调用了 onDestroy() 方法,但服务仍然保持运行。理想情况下,根据文档,它应该被杀死。

所以,我不知道这是一个问题还是什么。

作为引用,我创建了一个示例代码,反射(reflect)了相同的场景,如下所示:

步骤

  • 开始申请
  • 点击“启动后台服务”按钮。
  • 使用后退按钮关闭应用程序。

HomeActivity.java

package com.icpl.otest;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

import com.icpl.otest.service.MyService;

public class HomeActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}

public void onStartServiceClick(View view) {
Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);
}
}

MyService.java

package com.icpl.otest.service;

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {
private static final String TAG = "MyService";

private Handler mHandler;

public MyService() {
Log.i(TAG, "MyService constructor called.");
mHandler = new Handler();
}

@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, "onStartCommand with intent:- " + intent);
startShowingVisibility();
return START_NOT_STICKY;
}

private void startShowingVisibility() {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "I am alive");
startShowingVisibility();
}
}, 3000);
}

@Override
public void onDestroy() {
Log.i(TAG, "onDestroy()");
super.onDestroy();
}
}

最佳答案

After approx 1 min onDestroy() method gets called of background service but still the service keeps running

不,事实并非如此。您的服务可能已启动的工作可能会继续进行(在您的情况下,您的无限Handler“循环”)。但是,您的进程可能随时终止。

关于java - Android O - 后台服务限制未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43611706/

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