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