Der Hintergrunddienst wird ausgeführt, funktioniert jedoch nicht ordnungsgemäß in KitKatAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Der Hintergrunddienst wird ausgeführt, funktioniert jedoch nicht ordnungsgemäß in KitKat

Post by Anonymous »

Was ich habe. Auf Lollipop- und Post -Lollipop -Geräten läuft es vollkommen in Ordnung. Das Problem tritt jedoch auf, wenn ich es auf einem KitKat -Gerät versuche. Der Service bleibt am Leben, funktioniert aber nicht, da ich nicht feststellen kann, dass sich die Hintergrundbilder ändern. Es zeigt 1 Service für meine App und da es der einzige Dienst ist, den ich in der gesamten App implementiert habe, bin ich sicher, dass der Dienst am Leben ist. Darüber hinaus zeigt Greenify , dass der Dienst noch ausgeführt wird. Wenn der Benutzer das Intervall festlegt, nach dem sich das Hintergrundbild ändern sollte, und auf eine Schaltfläche klickt, um es zu starten, wird der Hintergrunddienst gestartet, der die Bitmap von diesen zuvor heruntergeladenen Bildern ableitet und nach angegebenen Intervallen als Hintergrundintervalle festlegt.
< /code>
Code für den Dienst. < /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>
Meine Beobachtungen. Für KitKat -Geräte wird jedoch so lange ausgeführt, wie die App geöffnet ist. Nachdem ich die App aus den jüngsten Apps herausgeholt habe, bleibt der Service am Leben, wechselt aber nicht mehr die Tapete.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post