2017-12-12 14 views
0

Ich habe eine MainActivity, eine Thread(RunJNIThread) und eine jniClass.c. Weil JNIUI Thread blockiert, verwende ich Thread, um jniClass.cpp auszuführen. Ich habe Activity verwendet, um MainActivity.StartJNI() in Thread aufzurufen, nachdem ich this gefunden habe, die besagt, "Activity in eine andere object zu übergeben ist normalerweise eine schlechte Idee".Wie übergebe ich native Methode, um in android zu fädeln?

Also, wie eine native Methode, die in MainActivity zu Thread definiert? Nicht mit Activity.

MainActivity.java

public RunJNIThread thread; 
thread = new RunJNIThread(this); 
.... 
static { 
    System.loadLibrary("jniClass"); 
} 
public native void StartJNI(); 
... 

RunJNIThread.java

private MainActivity mainActivity; 
getFrameThread(MainActivity mainActivity){ 
    this.mainActivity = mainActivity; //Not Good 
} 
public void run(){ 
    while(!Stop){ 
     mainActivity.StartJNI(); //how to replace this with better way 
     try { 
      Thread.sleep(5); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
... 

Antwort

0

Sie können eine neue Ansicht als Schnittstelle erstellen

interface MyView{ 
    void callMethod(); 
} 

Sie diese Ansicht in Ihre Hauptaktivität dann implementieren

MainActivity implements MyView 

Wenn Sie die Thread-Klasse erstellen, können Sie den Kontext übergeben, wenn er benötigt wird, und als Parameter anzeigen.

thread = new RunJNIThread(this,this) 

und der Konstruktor Ihrer Thread-Klasse sollte;

public class RunJNIThread{ 
    public void RunJNIThread(Context context , MyView view){ 
     this.context = context; 
     this.view = view; 
    } 
} 

Wenn Sie Ihre Hauptaktivitätsfunktion aufrufen möchten. Sie können "Callmethod()"

public void run(){ 
while(!Stop){ 
    view.callMethod(); 
    try { 
     Thread.sleep(5); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

in Ihrer Haupttätigkeit nennen, overrided Callmethod

@Override 
public void callMethod(){ 
    StartJNI(); 
} 
+0

Danke, es funktioniert. –

Verwandte Themen