テストアプリケーションTestProローカルAndroidサービスTestService2でテストアプリケーションを作成しました。 TestProでは、サービスを開始するボタンは1つだけです。 ボタンをクリックすると、の設定 - >アプリ - >実行中私は1つのプロセスと1つのサービスを見ることができます。サービスが正常に実行されていることを意味します。 その後、私は別のアプリケーションを開いて、最善の方法は開いているブラウザとサーフィンを開始(TestProは非アクティブになった)。しばらくすると、システムはTestProを殺します。私がプログラムをアクティブにしようとすると、それは成功なしで開始しようとします。システムは、応答していないアプリケーションを待機または強制終了するよう依頼します(LogCatは "Application.Initialize"を取得しません)。 2回目のスタート - 同じ。 3回目には、プログラムは正常に開始されます。 アイデアここで
アプリケーションのコードです:Unit1.pasでローカルサービスのあるAndroidアプリ(デルファイベルリン)
program TestPro;
uses
System.StartUpCopy,
FMX.Forms,
Unit1 in 'Unit1.pas' {FrmMain},
Androidapi.Helpers, // TAndroidHelper
AndroidApi.Log, // LOGI
Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.ActivityManager in 'Androidapi.JNI.ActivityManager.pas';
var
LIntent: JIntent;
{$R *.res}
begin
LogI('Application.Initialize'); // !!!
Application.Initialize;
Application.CreateForm(TFrmMain, FrmMain);
Application.Run;
end.
:ここ
unit Unit1;
...
procedure TFrmMain.StartService();
var
LIntent: JIntent;
begin
LIntent := TJIntent.Create;
LIntent.setClassName(TAndroidHelper.Context.getPackageName(),TAndroidHelper.StringToJString('com.embarcadero.services.TestService2'));
TAndroidHelper.Activity.startService(LIntent);
end;
procedure TFrmMain.Button1Click(Sender: TObject);
begin
StartService();
end;
サービスにおけるコード:
function TDM.AndroidServiceStartCommand(const Sender: TObject;
const Intent: JIntent; Flags, StartId: Integer): Integer;
begin
Result := TJService.JavaClass.START_STICKY;
end;
PS。 Delphi Berlin、SDK 24.3.3