2017-10-29 99 views
-2

我想創建一個應用程序,可以在某種方法執行時自動更新。我使用Handler來自動更新時間。當時間到了,它會將數據更新到firebase。它可以在應用程序未關閉時工作。但是當我在指定的更新時間之前關閉應用程序時,處理程序不起作用。儘管我使用了可以使應用程序保持運行的服務。如何使Handler始終運行,但在java中關閉應用程序

到目前爲止,這是我的代碼:

AutoUpdate.java

public class AutoUpdate extends AppCompatActivity { 
    TextView textDateTime; 
    TextView textcurrentDateTime; 
    DatabaseReference mDatabase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_auto_update); 

     String currentDate = DateFormat.getDateTimeInstance().format(new Date()); 
     textcurrentDateTime.setText(currentDate); 

     final Handler handler=new Handler(); 
     final Runnable updateTask=new Runnable() { 
      @Override 
      public void run() { 
       updateCurrentTimeToFirebase(); 
       handler.postDelayed(this,7000); 
       handler.removeCallbacks(this); 
      } 
     }; 

     handler.postDelayed(updateTask,7000); 
     startService(new Intent(this, MyService.class)); 
    } 

    public void updateCurrentTimeToFirebase() { 
     String currentDate = DateFormat.getDateTimeInstance().format(new Date()); 
     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     String id = mDatabase.push().getKey(); 
     mDatabase.child("autoUpdate").child(id).child("updateTime").setValue(currentDate); 
    } 
} 

Myservice.java

public class MyService extends Service { 
    public MyService() { 
    } 

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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return super.onStartCommand(intent, flags, startId); 
    } 
} 

請我需要你的幫助.. 三江源這麼多..

+0

而不是使用處理器,使用後臺服務運行所有的時間 –

+0

檢查我的onStartCommand()在服務使用onStart() –

回答

0

您正在創建後臺服務,但所有操作仍在進行g在前臺活動僅

更改您的代碼如下

AutoUpdate.class

public class AutoUpdate extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_auto_update); 

     if (!isMyServiceRunning(MyService.class)) { 
      Intent intent = new Intent(AutoUpdate.this, MyService.class)); 
      startService(intent); 
     } 
    } 
    private boolean isMyServiceRunning(Class<?> serviceClass) { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (serviceClass.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

MyService.class

public class MyService extends Service { 
    TextView textDateTime; 
    TextView textcurrentDateTime; 
    DatabaseReference mDatabase; 

    public MyService() { 

    } 

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

    public void onDestroy() { 
     Log.d("destroy", "onDestroy"); 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     //return super.onStartCommand(intent, flags, startId); 
     String currentDate = DateFormat.getDateTimeInstance().format(new Date()); 
     mDatabase = FirebaseDatabase.getInstance().getReference(); 
     textcurrentDateTime.setText(currentDate); 

     final Handler handler=new Handler(); 
     final Runnable updateTask=new Runnable() { 
      @Override 
      public void run() { 
       updateCurrentTimeToFirebase(); 
       handler.postDelayed(this,7000); 
       handler.removeCallbacks(this); 
      } 
     }; 

     handler.postDelayed(updateTask,7000); 
    } 
    public void updateCurrentTimeToFirebase() { 
     String currentDate = DateFormat.getDateTimeInstance().format(new Date()); 
     String id = mDatabase.push().getKey(); 
     mDatabase.child("autoUpdate").child(id).child("updateTime").setValue(currentDate); 
    } 
} 
相關問題