从不同的线程Android更新视图

时间:2013-03-07 17:19:00

标签: android multithreading sms

我制作了一个简单的Android应用程序,它会在收到短信时更新其视图。这是我的接收器类的代码

public class SMSReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    intent.setClass(context, SMSReceiverService.class);
    intent.putExtra("result", getResultCode());
    WakefulIntentService.sendWakefulWork(context.getApplicationContext(), intent);
}

}

该类将调用SMSReceiverService类来处理即将发生的SMS和执行方法notifyMessageReceived,如下所示。

private void notifyMessageRecevied(SMS message) {
    if(!isInMyApps()) {
                launchPopUp();
    }
    else {
        //updating view should go here
    }
}

问题是,我不知道如何更新我的活动中的视图(在单独的类中,而不是SMSReceiverService类),当我尝试在我的活动中更新我的TextView时,它抛出了CalledFromWrongThreadException。有人可以帮帮我吗?

提前致谢,抱歉我的英语不好......

2 个答案:

答案 0 :(得分:3)

您可以创建一个活动变量来保存所需活动的实例。

SMSReceiver(您要呼叫的人)中:

SMSReceiverService.setMainActivity(this);

SMSReceiverService(您想要更新的那个)中:

public static SMSReceiver smsActivity;
public static void setMainActivity(SMSReceiver activity) 
{
    smsActivity = activity;      
}

...

smsActivity.runOnUiThread(new Runnable() {
     public void run() {    
             try{
                    smsActivity.textView.setText("");
             }
             catch{}
     }
}

假设SMSActivity是包含您要更新的视图的文件。

答案 1 :(得分:0)

假设该服务具有用户活动上下文

Activity a=(Activity)userContext;
a.runOnUiThread(/*runnable method of activity which calls UpdateView() */);