2017-05-17 5 views
0

Ich versuche, einen Berechnungsrechner im Hintergrund mit JobScheduler auszuführen, aber irgendwie wird die Berechnung nicht ausgeführt. Das Programm läuft reibungslos, deshalb verwirrt es mich, warum es nicht funktioniert. Ich schätze Ihre Hilfe.JobScheduler wird nicht im Hintergrund ausgeführt

Hier ist mein Job Service-Klasse:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
public class MyJobService extends JobService { 
private JobParameters params; 

int num1a; 
int num1b; 
int num2a; 
int num2b; 
int num3a; 
int num3b; 
int num4a; 
int num4b; 
int num5a; 
int num5b; 

int sum1; 
int sum2; 
int sum3; 
int sum4; 
int sum5; 

SharedPreferences preferences; 
SharedPreferences.Editor editor; 

@Override 
public boolean onStartJob(JobParameters params) { 
    this.params = params; 
    Toast.makeText(getApplicationContext(), "Start", Toast.LENGTH_LONG).show(); 
    new MonthlyTask().execute(); 
    return true; 
} 

@Override 
public boolean onStopJob(JobParameters params) { 
    return false; 
} 

private class MonthlyTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPostExecute(Void xVoid) { 
     super.onPostExecute(xVoid); 
     jobFinished(params, false); 
     Toast.makeText(getApplicationContext(), "Finish", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     editor = preferences.edit(); 
     try { 
      num1a = preferences.getInt("expense1", 0); 
      num1b = preferences.getInt("subtotal1", 0); 
      num2a = preferences.getInt("expense2", 0); 
      num2b = preferences.getInt("subtotal2", 0); 
      num3a = preferences.getInt("expense3", 0); 
      num3b = preferences.getInt("subtotal3", 0); 
      num4a = preferences.getInt("expense4", 0); 
      num4b = preferences.getInt("subtotal4", 0); 
      num5a = preferences.getInt("expense5", 0); 
      num5b = preferences.getInt("subtotal5", 0); 

     } catch (NumberFormatException nfe) { 
      nfe.printStackTrace(); 
     } 
     sum1 = num1a + num1b; 
     sum2 = num2a + num2b; 
     sum3 = num3a + num3b; 
     sum4 = num4a + num4b; 
     sum5 = num5a + num5b; 

     editor.putInt("subtotal1", sum1); 
     editor.putInt("subtotal2", sum2); 
     editor.putInt("subtotal3", sum3); 
     editor.putInt("subtotal4", sum4); 
     editor.putInt("subtotal5", sum5); 
     return null; 
    } 
} 
} 

Hier ist meine Hauptaktivität

public class MainActivity extends AppCompatActivity implements android.view.View.OnClickListener{ 
    //Do stuffs 
    public void onClick(View view) { 
    if (view == findViewById(R.id.btnSave)) { 
    JobInfo.Builder builder = new JobInfo.Builder(1, new ComponentName(getPackageName(), 
       MyJobService.class.getName())); 
     //run job service after every 5 seconds, which put back to 15 mins...but thats fine 
     builder.setPeriodic(5000); 
     builder.setPersisted(true); 
     jobScheduler.schedule(builder.build()); 
     finish(); 
    }} 

Antwort

1

Ich versuche, eine Buchhaltung Rechner im Hintergrund zu laufen Jobscheduler mit

Diese Beispiel ist wirklich seltsam.

aber irgendwie, es wird die Berechnung nicht

Ähm, na ja, wenn sie von „Berechnung“, Sie zusätzlich bedeuten, ist es die Zugabe zu tun. Sie werfen dann jedoch die Ergebnisse weg. Sie edit() die SharedPreferences ohne Aufruf apply() oder commit(), um die Änderungen zu speichern.

+0

Vielen Dank !! Ich meine, es ist eine Ergänzung für den Moment, weil ich gerade das System teste, bevor ich es ersetze. Ich habe den commit() Teil komplett vergessen ... Ich dachte immer, dass etwas in meinem Job Scheduler fehlt. –

Verwandte Themen