java - 服务在应用程序关闭时停止
问题描述
我正在开发一个墙纸应用程序,在该应用程序中,我在墙纸上设置了一个具有 5 分钟、10 分钟等随机播放效果的图像库。我正在为这项任务使用服务。当应用程序保持在后台时,我的服务运行良好,但是当应用程序停止时服务停止。这是我的服务类代码:
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.
}
});
}}
这是我用来启动服务的代码:
Intent intent = new Intent(CategoryActivity.this,WallpaperService.class);
intent.putExtra("image_url",img_urls);
intent.setAction(Constants.ACTION.STARTFOREGROUND_ACTION);
startService(intent);
bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
解决方案
您是否在清单文件中添加了这些行
<application> <service android:name=".ExampleService" /></application>
推荐阅读
- matlab - Matlab - 在开普勒轨道上绘制卫星的速度矢量
- java - 为什么在我的代码中单线程比多线程快?
- python - 如何对每一行求和并用总和替换行中的每个值?
- excel - 锁定特定单元格并创建摘要表
- c++ - C++ - 移植 linux 代码 - _vscprintf 返回错误数量的参数
- html - 在 CSS 网格布局中如何将元素放置在行中的问题
- python - 如何在python中设置时间变量,季节性
- java - 用于 ATG 的 Junit 和 Mockito
- glsl - 在这种情况下,我应该在片段着色器中编写逻辑吗?
- html - Wordpress 标题很长,字母之间没有空格