请问静态Handler里Toast.makeText()方法的第一个参数怎么设置?

最近在写的程序需要Service和Activity通信,于是想到将MainActivity里面的dataHandler改为static,再在Service里面调用sendMessage()方法。但是handler改为static后,makeText()又报错了,查了一些解决方法都没什么用,请问这个要怎么改?谢谢!

代码:

 public static Handler dataHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 0) {
                // 处理服务器返回的id,并分配给用户
                try {
                    JSONObject jsonObject = new JSONObject(msg.obj.toString());
                    user.setId(jsonObject.getInt("id"));
                    Toast.makeText(MainActivity.this, "成功连接到服务器,id = " + user.getId(), Toast.LENGTH_SHORT).show();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    Toast.makeText(MainActivity.this, "用户id读取错误!", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }       
            } 
            ...
    }

MainActivity.this 报错:No enclosing instance of the type MainActivity is accessible in scope

定义一个静态的activity,this.activity=this; 然后把toast里面 的第一个参数换成activity;
private static Activity ac;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ac = this;
}

            public static Handler handler = new Handler(new Handler.Callback() {
    @Override
    public boolean handleMessage(Message msg) {
        Toast.makeText(ac, "用户id读取错误!", Toast.LENGTH_SHORT).show();
        return false;
    }
});

Service和Activity通信可以使用广播或者通过Binder对象通信的, 也非常方便。

MainActivity.this改成getApplicationContext

直接用this 啊,很明显,dataHandler在MainActivity中,handleMessage由MainActivity回调。

handler这样静态写不是会泄漏内存的么#132