qq_35454005 2016-09-13 14:53 采纳率: 68.8%
浏览 1097

初学android开发 ,请问如何在主子线程间传递消息,请看详情

我想在启动主activity后立即向thread发送消息并更新一个Textview,可是它并没有更新,而是在退出程序后(不是彻底结束)再返回activity是时才更新 为什么 一下是程序(有无关变量,请无视)
MainActivity
package com.example.administrator.a77777;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
static Handler handler1=new Handler();
static Handler handler2=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textview=(TextView)findViewById(R.id.te);
Button btnObj = (Button) findViewById(R.id.bu);
final LooperThread looperThread = new LooperThread(this);
looperThread.start();
looperThread.handlert1.sendEmptyMessage(1);
handler2=new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
textview.setText(msg.obj.toString());
}
};
btnObj.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

            looperThread.handler.sendEmptyMessage(1);

        }
    });
    handler1=new Handler(){
        @Override
        public void handleMessage(Message msg){
            textview.setText(msg.obj.toString());
        }
    };
}

}

Looperthread
package com.example.administrator.a77777;

import android.content.Context;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.widget.TextView;

import com.example.administrator.a77777.MainActivity;
/**

  • Created by Administrator on 2016/9/13.
    /
    class LooperThread extends Thread {
    public Handler handler=new Handler();
    static public Handler handlert1=new Handler();
    public static Context context;
    public LooperThread(Context con){
    context=con;
    }
    @Override
    public void run() {
    super.run();
    Looper.prepare();
    Text helper=new Text(context);
    final SQLiteDatabase db=helper.getWritableDatabase();
    /
    启动时更新数据*/
    QiDongGengXin();
    handlert1 = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    Message m=Message.obtain();
    m.obj="这是在启动时从子线程传来的消息";
    MainActivity.handler2.sendMessage(m);
    }
    };
    handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    Message m=Message.obtain();
    m.obj="这不是在启动时从子线程传来的消息";
    MainActivity.handler1.sendMessage(m);
    }
    };

    Looper.loop();//loop()会调用到handler的handleMessage(Message msg)方法,所以,写在下面;
    

    }
    public void QiDongGengXin(){
    String Szsy;
    SharedPreferences sp =context.getSharedPreferences("mrsoft",0);
    Szsy=sp.getString("restmoney","DULL");
    String S1= sp.getString("S1", "dull");
    String S2= sp.getString("S2", "dull");
    String S3= sp.getString("S3", "dull");
    String S4= sp.getString("S4", "dull");
    }
    }

  • 写回答

2条回答

  • devmiao 2016-09-13 15:58
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波