最近,我在后台创建了一个带有服务的应用。我想当我打开我的应用程序时,服务将停止,当我关闭我的应用程序时,服务将启动。我找到了一种方法。我把" startService" in" onDestroy"和#34; stopService" in" onCreate" MainActivity(此活动始终是第一个已启动且最后一个已销毁的活动)。但只有startService工作正常,当我启动我的应用程序时,stopService使我的MainActivity成为一个白色的空白屏幕。
MyService.class
Thread t;
public int onStartCommand(Intent intent, int flags, int startId) {
shouldContinue = true;
t = new Thread( new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while(shouldContinue){
int DELAY = 60000;
SystemClock.sleep(DELAY);
/**
** I update my Database every 60 seconds
**
*/
});
t.start();
// .......
public void onDestroy() {
// TODO Auto-generated method stub
if( t.isAlive()) {
shouldContinue = false;
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
super.onDestroy();
}
这是MyMainActivity.class
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
if( isMyServiceRunning() == true){
// TODO Auto-generated method stub
Intent i= new Intent(this, MyService.class);
stopService(i);
}
protected void onDestroy() {
// TODO Auto-generated method stub
if( isMyServiceRunning() == false){
Intent i= new Intent(this, MyService.class);
startService(i);
}
super.onDestroy();
}
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (MyService.class.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
请帮我解决这个问题。非常感谢你!
答案 0 :(得分:-1)
服务与您的活动在同一个线程上运行。
修改的
所以当你join()
onDestroy()
时,你会等待,最坏的情况是60秒..