이것은 더 의문의 여지가 있습니다. 현재, 내 코드는 잘 작동하지만 올바른 방법으로하고 있는지 확인하고 싶습니다.동일한 패키지의 서비스에서 활동이 실행되고 있는지 확인하십시오.
나는 액티비티가 포 그라운드에서 실행 중인지 확인하는 서비스가 있습니다. 그럴 경우, 활동에 브로드 캐스트를 보냄으로써 활동이 화면의 일부 내용을 갱신합니다. 서비스 활동이 전경에 있는지 알 필요가 여기에
com.harkdev.ServerStatus.SERVER_UPDATED
, 그래서 그것은 ApplicationManager
에서 실행중인 작업을 읽는 IsActivityRunning()
방법을 사용
IntentFilter
를 만들었습니다. 즉,
GET_TASKS
권한을 설정해야합니다.
SERVICE와 ACTIVITY가 동일한 패키지에 있으므로이 정보를 얻는 더 좋은 방법은 무엇입니까 ?? 그리고 아마도 시도하고 피하기 GET_TASKS
설정을 피하기 ??
이
내 서비스 코드입니다 :if (IsActivityRunning()) {
Intent localIntent = new Intent(SERVER_UPDATED);
SendBroadcast(localIntent, null);
}
IsActivityRunning()
방법 :
public bool IsActivityRunning() {
ActivityManager manager = (ActivityManager) GetSystemService(ActivityService);
IList<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.GetRunningTasks(1);
ComponentName componentInfo = runningTaskInfo[0].TopActivity;
if (componentInfo.PackageName == "com.harkdev.ServerStatus")
return true;
return false;
}
그리고 이것은 내 활동 코드입니다 :
protected override void OnCreate (Bundle bundle) {
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
IntentFilter filter = new IntentFilter(ServerStatusCheckService.SERVER_UPDATED);
_receiver = new ServiceBroadcastReceiver();
_receiver.Received += Receiver_Received;
RegisterReceiver(_receiver, filter);
}
? ResultReceiver는 어떻게 처리합니까? –
@JuanuHaedo 서비스에 'ResultReceiver'가 등록되어 있지 않으면 실행중인 작업이 없습니다. 그래서 당신은 확인할 필요가 없습니다. –
아마도 내 앱이 어떻게 작동하는지 더 자세히 설명해야합니다. 첫 번째로, 내 활동이 일정을 만듭니다. 둘째 :이 일정은 AlarmManager에 의해 서비스에서 실행됩니다. 서비스가 실행되고 활동이 실행 중이면 활동 화면의 정보를 업데이트해야합니다. 그렇지 않으면 아무 것도하지 않아도됩니다. –