2017-10-29 143 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); 
    } 
} 
相关问题