Android의 BindService 앱을 Delphi로 만들어 보았습니다.
9866 단어 안드로이드델파이FireMonkeyFMX
BindService는 StartService와 마찬가지로 앱에서 시작됩니다.
BindService에서 서비스에 연결하고 UnBindService에서 서비스와의 연결을 끊습니다.
StartService 가 스스로 정지하는 것과 달리, BindService 의 경우는, 다른 것으로부터 사용되고 있는 한 실행해 계속해, 누구로부터도 사용되지 않게 되면, 서비스를 파기합니다
참고 : Android Developer - Service
어떤 앱을 만드는가?
Android의 StartService 앱을 Delphi로 만들어 보았습니다.로 만든 앱 서비스를 수정하고 확장합니다.
수정·확장하므로 메인 앱에 서비스를 등록하는 작업을 다시 할 필요가 없습니다.
수정 · 확장 내용이지만
메인 측 화면 확장
버튼을 1개, 새롭게 배치하는 것만으로 간단한 일
이해하기 쉽도록 BindService, UnBindService 및 Text 속성 변경
메인 측 동작 확장
BindService 버튼의 클릭 이벤트를 다음과 같이 수정합니다.
procedure TForm1.Button1Click(Sender: TObject);
begin
// Service 起動
if mService = nil then begin
mService := TLocalServiceConnection.Create;
mService.StartService('Project2');
end;
// Service に Bind
mService.BindService('Project2', 0);
end;
UnBindService 버튼의 클릭 이벤트를 다음과 같이 작성합니다.
procedure TForm1.Button2Click(Sender: TObject);
begin
if mService <> nil then begin
mService.UnbindService; // Service との接続解除
mService := nil;
end;
end;
서비스 측 확장
DM (TDM)에 새 OnBind 이벤트와 OnUnBind 이벤트 추가
OnStartCommand 이벤트의 코드를 다음과 같이 수정합니다.
function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
// サービスの開始
// StartService は result を返す
Result := TJService.JavaClass.START_STICKY;
end;
OnBind 이벤트의 코드를 다음과 같이 작성합니다.
function TDM.AndroidServiceBind(const Sender: TObject; const AnIntent: JIntent): JIBinder;
var
mNotice: TNotification;
begin
// BindService として通知の実行
mNotice := NotificationCenter1.CreateNotification;
mNotice.Title := 'BindService通知';
mNotice.AlertBody := 'メッシャアーッ';
NotificationCenter1.PresentNotification(mNotice);
mNotice.DisposeOf;
// IBinder オブジェクトを戻り値として返す
Result := GetBinder;
end;
OnUnBind 이벤트의 코드를 다음과 같이 작성합니다.
function TDM.AndroidServiceUnBind(const Sender: TObject; const AnIntent: JIntent): Boolean;
begin
// このサンプルでは解除=停止
// サービスの停止
JavaService.stopService(AnIntent);
Result := False;
end;
움직여 보자
우선은 어플리 기동
BindService를 탭하면 서비스가 시작되고 해당 서비스에 연결되어 "알림"이 발생합니다.
알림 내용
UnBindService를 탭하면 서비스와의 연결을 끊고 서비스를 중지합니다.
BindService 버튼을 계속해서 두 번 탭해도 알림은 하나뿐입니다.
이것은 아직 Bind가 해제되지 않았기 때문에 OnBind 이벤트가 발생하지 않습니다.
UnBindService 버튼을 탭한 다음 BindService 버튼을 탭하면 OnBind 이벤트가 발생하여 알림을 받습니다.
참고
BindService 라이프사이클
Android Developer
후기
Delphi에서 Android 서비스를 만들 때 네 가지 선택
나온다.
'로컬'과 '원격'의 차이는
로컬 - 해당 앱에서만 사용할 수 있는 private 서비스
원격 - public이며 다른 앱에서 액세스 할 수 있습니다.
입니다
"인텐트 xxxx 서비스"는 서비스에서 IntentService을 사용하려면 선택합니다.
IntentService는 백그라운드에서 특정 작업을 수행하고 작업자 스레드에서 작업 대기열을 수신 순서대로 처리합니다.
서비스의 정지는 큐내의 작업이 모두 끝났을 때에 자동적으로 행해지므로, 명시적으로 정지할 필요는 없습니다
Reference
이 문제에 관하여(Android의 BindService 앱을 Delphi로 만들어 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/CYonezawa/items/e1171ac689f6cff8804f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)