FireMonkey 예제 자료

FireMonkey 안드로이드 타 쓰레드 Toast 알림 사용하기(액티비티,서비스) 가능

kimsyo11 2022. 4. 1. 22:26
728x90

Toast 같은 경우 UI 메인 쓰레드에서만 동작이 가능하기에

타 쓰레드에서 Toast를 불러와서 사용할수가 없습니다

 

파이어몽키 타 쓰레드 Toast 관련된 예제는 구글에도 없기에 만들어서 올립니다

타 쓰레드에서 Toast 사용을 하고 싶다면

제가 만들어둔 코드는 아래의 코드로 해야

타 쓰레드에서 Toast 알람 기능을 사용할수가 있습니다

액티비티에도 사용이가능하고 안드로이드 서비스에서도 사용이 가능합니다

//kimsyo5140

uses Androidapi.JNIBridge, Androidapi.JNI.Os, Androidapi.JNI.JavaTypes;
type
  KMSRunnable = class(TJavaLocal, JRunnable)
  private
    ToastStr : string;
  public
    constructor Create(const TmpStr : string);
    procedure run; cdecl;
  end;

constructor KMSRunnable.Create(const TmpStr : string);
begin
  inherited Create;
  ToastStr := TmpStr;
end;

procedure KMSRunnable.run;
begin
  TmpToast.JavaClass.makeText(SharedActivityContext, StrToJCharSequence(ToastStr), TJToast.JavaClass.LENGTH_SHORT).show;
end;

procedure THreadMessageToast(TmpMessage : string);
var ToastHandle : JHandler;
    Runnable : JRunnable;
begin
  ToastHandle := TJHandler.JavaClass.init(TJLooper.JavaClass.getMainLooper); // 핸들러에 getMainLooper로 초기화 시켜준다
  Runnable := KMSRunnable.Create(TmpMessage); // Runnable 변수에 KMSRunnable 객체를 대입 해준다
  ToastHandle.post(Runnable); // 핸들러에 Post로 통해  KMSRunnable쪽 객체 전달을 해준다 최종 KMSRunnable.Run 실행
end;

procedure ThreadToastStart; 
begin
 TTask.Run(procedure
    begin
      while True do
      begin
        sleep(3000); // 3초 
        THreadMessageToast('Toast 테스트중입니다.');
      end;
    end).Start; 
end;

 

 

728x90