Android O – 后台服务限制无法按预期工作

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

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

所以现在问题是一旦活动和后台服务开始,我正在使用后退按钮关闭我的活动。 因此,根据服务概念,它会在后台运行。

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

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

作为参考,我创建了一个反映相同场景的示例代码,如下所示:

脚步

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

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(); } } 

大约1分钟后,onDestroy()方法被调用后台服务,但服务仍然在运行

不,不是的。 您的服务可能已经开始的工作可能继续(在您的情况下,您的无限Handler “循环”)。 但是,您的流程可能随时终止。