问题:服务在杀死应用时被销毁

时间:2018-04-03 06:14:32

标签: android service background android-mediaplayer

根据我的搜索:

要在后台运行服务,您必须使用标志START_STICKY创建一个STICKY服务。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
  // Do your task here
  return START_STICKY;
 }

START_STICKY服务可以在后台运行而不存在任何活动。您可以通过回调与服务进行通信。

但问题是:

当我杀死应用程序时,由于我正在使用START_STICKY,再次调用onCreate()和onStartCommand()方法。

但是,如果我想在应用程序被杀死时继续运行服务而不破坏它,该怎么办?

实际上,我正在使用媒体播放器。 代码如下:

服务:

public class MyService extends Service {

private MediaPlayer media;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}


@Override
public void onCreate() {
    super.onCreate();
    Toast.makeText(this, "on create", Toast.LENGTH_SHORT).show();
    media = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI);
    media.setLooping(true);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Toast.makeText(this, "on start command", Toast.LENGTH_SHORT).show();
    if (media!=null && !media.isPlaying()) {
        media.start();
    }else{
        Toast.makeText(this, "media is not playing", Toast.LENGTH_SHORT).show();
    }
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    media.stop();
    Toast.makeText(this, "service on destroy", Toast.LENGTH_SHORT).show();
}

服务电话:

public class MainActivity extends AppCompatActivity {

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

public void startMethod(View v) {
    startService(new Intent(this, MyService.class));
}

public void stopMethod(View v) {
    stopService(new Intent(this, MyService.class));
}

}

那么,媒体播放器如何不停地运行?现在,它在我杀死应用程序时停止,并在服务的onCreate()和onStartCommand()方法再次调用时再次启动我正在使用START_STICKY。

0 个答案:

没有答案