Фоновая служба работает, но не работает должным образом в KitkatAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Фоновая служба работает, но не работает должным образом в Kitkat

Сообщение Anonymous »

Что у меня есть. Он отлично работает на Lollipop и Post Lollipop устройствах. Но проблема возникает, когда я пробую это на устройстве Kitkat. Сервис остается в живых, но не функционирует, так как я не могу найти меняющиеся обои. Он показывает 1 службу, работающую для моего приложения, и, поскольку это единственная служба, которую я реализовал во всем приложении, я уверен, что сервис жив. Более того, greenify показывает, что служба все еще работает. Когда пользователь устанавливает интервал, после чего обои должны меняться, и нажимает кнопку, чтобы запустить ее, запускается фоновая служба, которая получает растровое изображение из тех ранее загруженных изображений и устанавливает их как обои после указанных интервалов.
< /code>
код для службы. < /h2>
public class AutomaticWallpaperChanger extends Service {
public static long NOTIFY_INTERVAL;
Boolean shuffle;
int wallpaper;
SharedPreferences mySharedPreferences;
SharedPreferences.Editor editor;

// run on another Thread to avoid crash
private Handler mHandler = new Handler();
// timer handling
private Timer mTimer = null;

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("onstart gallery dialog","called");
editor.putBoolean("service not running",false).commit();
return START_STICKY;
}

@Override
public void onCreate() {
// cancel if already existed
if (mTimer != null) {
mTimer.cancel();
} else {
// recreate new
mTimer = new Timer();
}
mySharedPreferences = getApplicationContext().getSharedPreferences("preferences", Activity.MODE_PRIVATE);
editor= mySharedPreferences.edit();
AutomaticWallpaperChanger.NOTIFY_INTERVAL=mySharedPreferences.getInt("interval",3600);//3600*1000)*1000;
AutomaticWallpaperChanger.NOTIFY_INTERVAL*=1000;
// schedule task
mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
}

class TimeDisplayTimerTask extends TimerTask {

@Override
public void run() {
Log.d("timer","Running");
// run on another thread
mHandler.post(new Runnable() {

@Override
public void run() {
//Toast.makeText(getApplicationContext(),
//"running",
// Toast.LENGTH_SHORT).show();
// display toast
AsyncTask asyncTask= new AsyncTask() {
@Override
protected Object doInBackground(Object[] objects) {
File folder = new File(Environment.getExternalStorageDirectory() + File.separator + "WallR"+ File.separator + "Gallery");
if(folder.exists()) {
File[] listOfFiles = folder.listFiles();
shuffle = mySharedPreferences.getBoolean("checked", false);
Log.d("shuffle", String.valueOf(shuffle));
if (shuffle != true) {

if (listOfFiles.length != 0) {
wallpaper = mySharedPreferences.getInt("wallpaper", 0);
wallpaper++;
editor.putInt("wallpaper", wallpaper);
editor.commit();
if (wallpaper >= listOfFiles.length) {
wallpaper = 0;
editor.putInt("wallpaper", wallpaper);
editor.commit();
}
Log.d("wallpaperr number", String.valueOf(wallpaper));
Bitmap bitmap = BitmapFactory.decodeFile(listOfFiles[wallpaper].getPath());
WallpaperManager mWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
try {
mWallpaperManager.setBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
bitmap.recycle();
}
}
else {
if (listOfFiles.length != 0) {
wallpaper = mySharedPreferences.getInt("wallpaper", 0);
wallpaper++;
editor.putInt("wallpaper", wallpaper);
editor.commit();
if (wallpaper >= listOfFiles.length) {
wallpaper = 0;
editor.putInt("wallpaper", wallpaper);
editor.commit();
}
shuffleArray(listOfFiles);
Log.d("wallpaperr number", String.valueOf(wallpaper));
Bitmap bitmap = BitmapFactory.decodeFile(listOfFiles[wallpaper].getPath());
WallpaperManager mWallpaperManager = WallpaperManager.getInstance(getApplicationContext());
try {
mWallpaperManager.setBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
bitmap.recycle();
}
}
}
return null;
}
};
asyncTask.execute();

}

});
}
void shuffleArray(File[] ar)
{
// If running on Java 6 or older, use `new Random()` on RHS here
Random rnd = new Random();
for (int i = ar.length - 1; i > 0; i--)
{
int index = rnd.nextInt(i + 1);
// Simple swap
File a = ar[index];
ar[index] = ar;
ar = a;
}
}

}

@Override
public void onDestroy() {
editor.putBoolean("service not running", true).commit();
mTimer.cancel();
mTimer.purge();

}

}
< /code>
мои наблюдения. < /h2>
Служба работает совершенно хорошо для устройств Lollipop, Marshmallow и Nougat. Но для устройств Kitkat он работает до тех пор, пока приложение открыто. После того, как я пробегаю приложение из недавних приложений, сервис остается в живых, но больше не меняет обои.

Подробнее здесь: https://stackoverflow.com/questions/424 ... -in-kitkat
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»