Java 服务在应用程序关闭时停止
我正在开发一个墙纸应用程序,在该应用程序中,我将在墙纸上设置一个具有洗牌效果的图像库,时间分别为5分钟、10分钟等。我正在使用该服务完成此任务。当应用程序仍在后台时,我的服务运行良好,但当应用程序停止时,服务将停止。这是我的服务类代码:Java 服务在应用程序关闭时停止,java,android,service,Java,Android,Service,我正在开发一个墙纸应用程序,在该应用程序中,我将在墙纸上设置一个具有洗牌效果的图像库,时间分别为5分钟、10分钟等。我正在使用该服务完成此任务。当应用程序仍在后台时,我的服务运行良好,但当应用程序停止时,服务将停止。这是我的服务类代码: public class WallpaperService extends Service { ArrayList<String> arrayList;int counter = 0; boolean serviceStopped; privat
public class WallpaperService extends Service {
ArrayList<String> arrayList;int counter = 0;
boolean serviceStopped;
private IBinder binder = new WallpaperServiceBinder();
public WallpaperService() {
}
private Handler mHandler;
private Runnable updateRunnable = new Runnable() {
@Override
public void run() {
if (serviceStopped == false)
{
createNotificationIcon();
}
queueRunnable();
}
};
public class WallpaperServiceBinder extends Binder {
public WallpaperService getService() {
return WallpaperService.this;
}
}
private void queueRunnable() {
// 600000 : cada 10 minutos, comprueba si hay nuevas notificaciones y actualiza la
// notification BAR
mHandler.postDelayed(updateRunnable, 5000);
}
@Override
public int onStartCommand(Intent intent,int flag, int start_id){
super.onStartCommand(intent,flag,start_id);
arrayList = intent.getStringArrayListExtra("image_url");
return START_STICKY;
}
@Override
public void onRebind(Intent intent) {
Log.v("Service","in onRebind");
super.onRebind(intent);
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public void onCreate() {
serviceStopped = false;
mHandler = new Handler();
queueRunnable();
}
@Override
public void onStart(Intent intent, int startid) {
}
public void createNotificationIcon()
{
counter += 1;
Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
Picasso.with(getApplicationContext()).load(arrayList.get(counter)).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
final WallpaperManager wallpaperManager =
WallpaperManager.getInstance(getApplicationContext());
wallpaperManager.setBitmap(bitmap);
wallpaperManager.suggestDesiredDimensions(1080, 1920);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
//Here you should place a loading gif in the ImageView to
//while image is being obtained.
}
});
}}
如果组件调用bindService()来创建服务,而未调用onStartCommand(),则仅当组件绑定到服务时,服务才会运行。服务从其所有客户端解除绑定后,系统将销毁它
已启动的服务是另一个组件通过调用startService()启动的服务,这将导致调用该服务的onStartCommand()方法
当服务启动时,它的生命周期独立于启动它的组件。该服务可以无限期地在后台运行,即使启动它的组件已被销毁。因此,服务应该在其作业完成时通过调用stopSelf()停止自身,或者其他组件可以通过调用stopService()停止它
应用程序组件(如活动)可以通过调用startService()并传递指定服务并包含服务要使用的任何数据的意图来启动服务。服务通过onStartCommand()方法接收此意图
请注意,onStartCommand()方法必须返回一个整数。整数是一个值,用于描述在系统终止服务时系统应如何继续服务。IntentService的默认实现会为您处理此问题,但您可以对其进行修改。onStartCommand()的返回值必须是以下常量之一:
希望这有帮助。您是否已在清单文件中添加了这些行
<application> <service android:name=".ExampleService" /></application>
这可能会对您有所帮助:我尝试了所有这些,但没有任何效果。请帮帮我。我的服务不是持久性的。它是您在任何特定设备制造商上测试的场景,还是所有设备的常见行为。
<application> <service android:name=".ExampleService" /></application>