Qt nennt den ursprünglichen Toast – Qt für Android

Hintergrundwissen

Als ich den ursprünglichen Toast aufrufen wollte, stellte ich fest, dass ein direkter Aufruf nicht möglich war. Die UI-Steuerelemente von Android befinden sich alle im Hauptthread (auch UI-Thread genannt). Toast ist ebenfalls Teil der Benutzeroberfläche und sollte daher auch im Hauptthread aufgerufen werden.

Der Handler wird für die Kommunikation zwischen Android-Threads verwendet.

Einführung in Handler

Der Handler ist eine Reihe von Android-Nachrichtenübermittlungsmechanismen, die hauptsächlich für die Kommunikation zwischen Threads verwendet werden.

Beschreiben Sie es in einfachsten Worten: Der Handler ist eigentlich ein Sub-Thread, der vom Haupt-Thread erstellt wird. Der Sub-Thread wird ausgeführt und generiert Nachrichten. Der Looper ruft die Nachricht ab und übergibt sie an den Handler. Der Handler ruft die Nachrichten im Sub-Thread ab -Threads nacheinander.

Binder/Socket wird für die Kommunikation zwischen Prozessen verwendet, während der Handler-Nachrichtenmechanismus für die Kommunikation zwischen Threads im selben Prozess verwendet wird.

Man kann sagen, dass überall dort, wo ein asynchroner Thread mit dem Hauptthread kommuniziert, ein Handler vorhanden sein muss.
 

Android – Detaillierte Erklärung des Blog-CSDN-Blogs von Handler_android handler_Yawn__

 

 Codeanzeige

MainActivity.java

package com.example.hellowolrd;

import android.content.Intent;
import android.os.Looper;
import android.widget.Toast;
import android.os.Handler;
import android.os.Message;
import org.qtproject.qt5.android.bindings.QtActivity;


public class MainActivity extends org.qtproject.qt5.android.bindings.QtActivity {

    private static MainActivity m_instance;
    private static Handler m_handler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
             switch (msg.what) {
             case 1:
                 Toast toast = Toast.makeText(m_instance,(String)msg.obj, Toast.LENGTH_LONG);
                 toast.show();
                 break;
             };
         }
     };
     public MainActivity(){
             m_instance = this;
         }
     public static void makeToast(String s){
         m_handler.sendMessage(m_handler.obtainMessage(1, s));
     }

}

c++

    QAndroidJniObject javaToast = QAndroidJniObject::fromString("Hello~~~");
    QAndroidJniObject::callStaticMethod<void>("com/example/hellowolrd/MainActivity",
                                        "makeToast",
                                        "(Ljava/lang/String;)V",
                                        javaToast.object<jstring>());

Guess you like

Origin blog.csdn.net/xiaopei_yan/article/details/131377935