2017-11-02 9 views
-1

15 초마다 데이터를 동기화하는 생성 된 JobService (mysql과 동기화되지 않은 상태의 데이터 만 동기화)에 대해 SQLite 데이터를 mysql과 동기화하려고합니다. 이것은 localhost (xampp 서버)와 완벽하게 작동합니다. 하지만 웹 서버에 문제가 발생했습니다. 15 초마다 JobService와 중복되는 항목이 발생합니다.JobService가 제대로 작동하지 않습니다.

JobInfo.Builder builder = new JobInfo.Builder(1, 
      new ComponentName(getPackageName(), MyService.class.getName())); 

    builder.setPeriodic(15000); 

또한 내 로그 캣이

E/표면 보여줍니다

MyService.java

public class MyService extends JobService { 

    private DatabaseHelper db; 
    SQLiteDatabase sqLiteDatabase; 

    private Handler mJobHandler = new Handler(new Handler.Callback() { 
     @Override 
     public boolean handleMessage(Message msg) { 
      Toast.makeText(getApplicationContext(), "JobService task running", Toast.LENGTH_SHORT).show(); 
      jobFinished((JobParameters) msg.obj, false); 
      return true; 
     } 
    }); 

    @Override 
    public boolean onStartJob(JobParameters params) { 
     mJobHandler.sendMessage(Message.obtain(mJobHandler, 1, params)); 
     db = DatabaseHelper.getInstance(getApplicationContext()); 
     postData(); 
     //db.close(); 
     return true; 
    } 

    @Override 
    public boolean onStopJob(JobParameters params) { 
     mJobHandler.removeMessages(1); 
     return false; 
    } 

    private void postData() { 

     Cursor cursor = db.getUnsyncedNames(); 
     try { 
      if (cursor != null) { 

       if (cursor.moveToFirst()) { 

        do { 
         saveName(cursor.getInt(cursor.getColumnIndex(DatabaseHelper.COLUMN_ID)), cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_FROM_NO)), cursor.getString(cursor.getColumnIndex(DatabaseHelper.COLUMN_TO_NO))); 
        } while (cursor.moveToNext()); 
       } 
      } 
     } finally { 
      if (cursor != null && !cursor.isClosed()) 
       cursor.close(); 
      db.close(); 
     } 
    } 

    private void saveName(final int id, final String fromNo, final String toNo) { 
     StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.URL_REQUEST_SMS, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 
          JSONObject obj = new JSONObject(response); 
          if (!obj.getBoolean("error")) { 
           //updating the status in sqlite 
           db.updateNameStatus(id,NAME_SYNCED_WITH_SERVER); 

           sqLiteDatabase = db.getWritableDatabase(); 
           if (sqLiteDatabase != null) { 
            sqLiteDatabase.delete(DatabaseHelper.TABLE_NAME, null, null); 
           } 
           // db.close(); 

           Toast.makeText(getApplicationContext(),"Unsynced no. submitted!",Toast.LENGTH_LONG).show(); 

           //calls.clear(); 

          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 

          Toast.makeText(getApplicationContext(),"JSONException error1 : "+e,Toast.LENGTH_LONG).show(); 

         } 
         finally { 
          db.close(); 
         } 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(getApplicationContext(),"VolleyError error2 : "+error,Toast.LENGTH_LONG).show(); 
         error.printStackTrace(); 
        } 
       }) { 
      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 
       Map<String, String> params = new HashMap<>(); 
       params.put("mobile", fromNo); 
       params.put("toMob", toNo); 
       return params; 
      } 
     }; 

       int socketTimeout = 60000; 
       RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, 
         DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
         DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
       stringRequest.setRetryPolicy(policy); 

     MyApplication.getInstance().addToRequestQueue(stringRequest); 
    } 
} 

MainActivity.java는 : getSlotFromBufferLocked : 알 수없는 버퍼 : 0x7f517cd1b540

답변

1

그래, 나는 같은 문제가 있었고, 발리가 한번 메모리를 할당하고, 메모리 할당을 해제하지 않는다는 것을 알게되었다. 그것은 메모리를 bloats 및 작업 서비스 (2)를 갱신하는 것이 이전 이러한 모든 서비스를 중지하는 OS GC는, 완벽하게 가장 좋은 해결책은 우리가 스트레스가 그것을

+0

을 테스트 한으로 2 개조로 이동하는 것입니다

작동 강제 즉시 응답 메이트 주셔서 감사합니다. 나는 당신이 알게하려고 노력할 것입니다. – Omi

+1

희망을 위해 일한 희망, –

+0

감사합니다. 개조 작업이 매력처럼 ... – Omi