2015-04-29 22 views
0

如何在Android中關閉Service?或者我如何取消註冊或關閉Reciever public void onDestroy()不起作用如何關閉android服務或關閉Reciever?

這是我Service

public class LockScreenService extends Service{ 
BroadcastReceiver mReceiver; 
public static volatile boolean isMustBeLocked; 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void onCreate() { 
    KeyguardManager.KeyguardLock k1; 

    //getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
    if(isMustBeLocked) { 
     KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
     k1 = km.newKeyguardLock("IN"); 
     k1.disableKeyguard(); 

     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
     filter.addAction(Intent.ACTION_SCREEN_OFF); 

     mReceiver = new LockScreenReceiver(); 
     registerReceiver(mReceiver, filter); 
     super.onCreate(); 

    } 
    else{ 
     Log.e("LockScreenService","TEST"); 
    } 

} 
@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 

    super.onStart(intent, startId); 
} 
/*@Override 
public void onPause(){ 

}*/ 
public void destroy(){ 
    if(mReceiver!=null) { 
     unregisterReceiver(mReceiver); 
     Log.e("","TEST destroy3"); 
    } 
    Log.e("","TEST destroy2"); 
} 
@Override 
public void onDestroy() { 
    if(mReceiver!=null) { 
     unregisterReceiver(mReceiver); 
     Log.e("","TEST destroy"); 
    }Log.e("","TEST destroying"); 
    super.onDestroy(); 
} 

}

+0

你是什麼意思「的onDestroy()'不工作?什麼不行?你怎麼知道的? –

回答

0

服務 - 你叫stopService。在服務內部,您可以打電話給stopSelf。您調用unregisterReceiver的接收器(僅適用於動態創建的接收器,不適用於在清單中註冊的接收器)。

1

要關閉該服務:

Intent intent = new Intent(this, Service.class) 
stopService(intent); 

要註銷接收器一定要第一:

unregisterReceiver(mybroadcast);