首页 > 解决方案 > 服务在应用程序关闭时停止

问题描述

我正在开发一个墙纸应用程序,在该应用程序中,我在墙纸上设置了一个具有 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);

标签: javaandroidservice

解决方案


您是否在清单文件中添加了这些行

<application> <service  android:name=".ExampleService" /></application>

 


推荐阅读