ローカル Android サービスTestService2を使用して、いくつかのテスト アプリケーションTestProを作成しました。TestPro では、サービスを開始するボタンは 1 つだけです。ボタンをクリックすると、[設定] -> [アプリ] -> [実行中] に1 つのプロセスと 1 つのサービスが表示されます。それはサービスが正常に実行されていることを意味します。その後、別のアプリケーションを開きます。最良の方法は、ブラウザーを開いてサーフィンを開始することです (TestPro が非アクティブになりました)。しばらくすると、システムは TestPro を強制終了します。プログラムをアクティブにしようとすると、成功せずに起動しようとします。システムは待機するか、応答していないアプリを強制的に閉じます ( LogCat は "Application.Initialize" を取得しません)。2回目の開始時 - 同じ。3回目にプログラムが正常に起動します。何か案は?
アプリケーションコードは次のとおりです。
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.
Unit1.pas:
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 ベルリン、SDK 24.3.3