Rafael hat mein Problem fast genau geblickt, der Zugriff per handler auf den UI-Thread funktioniert allerdings. Ich wollte mal den Eventbus testen komme aber nicht klar. Ich weiß nicht wie ich die Events händeln soll. mein Thread schickt alle paar ms ne post die kommt aber nur im selben thread an, ebenso wenn ich den button klicke passierts nur im UIThread. Die Nachrichten eines Threads sollen halt im anderen thread ankommen. hier mal mein Testcode (also nicht schlagen Anfänger in sachen threads, eventbus etc)
package com.example.handlerexample;
//import com.example.handlerexample.BackgroundThread2.MyEvent;
import de.greenrobot.event.EventBus;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.util.Log;
public class MainActivity extends Activity {
String tag = "MainActivity" ;
public Button btnclick;
public BackgroundThread2 MyBack;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnclick = (Button) findViewById(R.id.button1);
MyBack = new BackgroundThread2();
MyBack.start();
EventBus.getDefault().register(this);
}
@Override
public void onStart() {
super.onStart();
//EventBus.getDefault().register(this);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
public void onEventMainThread(MessageEvent event) {
Toast.makeText(this, event.message, Toast.LENGTH_SHORT).show();
}
public void btnclick(View view){ //o
Log.d("Ui- ","button clicked ");
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
}
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
public class MyEvent {
private boolean IsBoolean;
public MyEvent ( boolean IsBoolean) {
this .IsBoolean = IsBoolean;
}
public boolean isMyEvent () {
return this .IsBoolean;
}
}
}
Der Thread:
package com.example.handlerexample;
import de.greenrobot.event.EventBus;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.EventLog.Event;
import android.util.Log;
public class BackgroundThread2 extends Thread{
//@Inject EventBus bus;
private int counter;
private String tag = "Thread ey";
//constructor
public void onEvent(MyEvent Event){
Log.d (tag, "OnEvent: " + "thread:" + Thread.currentThread().getId ());
}
public void onEvent(MessageEvent event){
Log.d (tag, "OnEvent: " + event.message + "thread:" + Thread.currentThread().getId ());
}
@Override
public void run() {
EventBus.getDefault().register(this);
while(true){
try {
//parentHandler.sendEmptyMessage(4);
counter++;
if (counter >= 5){
counter =0;
EventBus.getDefault().postSticky(new MessageEvent("message from thread"));
}
Thread.sleep(500 );
System.out.println( "warte. counter" + counter +" Threadid: " + Thread.currentThread().getId () );
} catch ( InterruptedException e ) { e.printStackTrace(); }
}
}
public class MessageEvent {
public final String message;
public MessageEvent(String message) {
this.message = message;
}
}
public class MyEvent {
// ** Judgments based * /
private boolean IsBoolean;
public MyEvent ( boolean IsBoolean) {
this .IsBoolean = IsBoolean;
}
public boolean isMyEvent () {
return this .IsBoolean;
}
}
}// das ende
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.