作者Ferich (纯粹的透明)
看板AndroidDev
标题[问题] android thread实作问题
时间Tue Oct 30 13:52:41 2012
已爬过文 还是不甚理解 thread的宣告与用法
为何要用thread 主要是因为手上的手机是xs 为版本4.0.4
在httppost上无法写入
在网路上看的解法是 需要写入thread 给副thread去执行 而非main thread
(如有错误 请协助修正)
所以小弟来问thread的问题
主要是由一个按钮按下去 传一个值给function 让他去执行httppost这件事情
按钮按下去
renew=(Button) findViewById(R.id.update);
renew.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new Thread(new Runnable(){
public void run(){
post(regId);
}
}).start();
Toast.makeText(DemoActivity.this, "send ok", Toast.LENGTH_LONG).show();
}
});
跟function接口
private String post(String id){
balabala
}
------------------------------------
在非4.0的手机上
在没写进thread时 按下按钮直接 post(regId);
是可以执行写入成功的
请问 这样的thread 似乎按下按钮 就会当掉
是有什麽问题
还是小弟把thread想太简单了
以上.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.34.130.81
※ 编辑: Ferich 来自: 1.34.130.81 (10/30 13:55)
1F:→ realmeat:感觉要透过handler, thread送出msg由handler执行 10/30 15:00
2F:→ Ferich:请指教 写了几种写法 debug直接都跳过thread.. 10/30 15:10
3F:→ Ferich:想法是 thread要宣告在onclick内 去呼叫function给值 10/30 15:11
4F:→ transwrap:post会不会成功跟写在哪个thread没有关系~ 10/30 15:14
5F:→ transwrap:只是post写在main thread会让使用者有卡住的感觉 10/30 15:15
6F:→ realmeat:最近才开始碰anrdroid, 得到的讯息是非main thread没法控 10/30 15:17
7F:→ realmeat:制UI上的动作, 只能靠handler来控制 10/30 15:17
8F:→ realmeat:thread丢出msg, msg由handler接收後执行 10/30 15:17
9F:推 transwrap:post不是ui动作 所以要写在哪个thread都可(包括main) 10/30 15:21
10F:→ transwrap:如果以前把post写在main thread ok但是现在不行 10/30 15:25
11F:→ transwrap:我会猜是你用的http post library有问题 10/30 15:26
12F:→ transwrap:而不是因为你没有另外开一个thread跑post所以才失败 10/30 15:27
13F:→ Ferich:我没用httppost的lib耶 是指android-support-v4.jar吗? 10/30 15:31
14F:→ realmeat:所以在非main thread内call Toast算是合规则吗? 10/30 15:34
15F:→ realmeat:眼花了, 看错行 XD 10/30 15:38
16F:→ transwrap:如果不熟android我建议就先把post弄到动就好 10/30 15:42
17F:→ transwrap:你的程式里面又有AsyncTask又有thread 10/30 15:43
18F:→ transwrap:但是这两个本质上是一样的东西 应该只要选一种用 10/30 15:43
19F:→ Ferich:以不用thread的方式 android非4.0的 都写得进去 10/30 15:43
20F:→ transwrap:你不如先开一个新专案把post弄到动以後再继续加东西 10/30 15:44
21F:→ transwrap:然後用Log.d debug 很多toast(ui)在非main thread 10/30 15:46
22F:→ transwrap:toast在其他thread应该是不会跳出来 10/30 15:48
23F:→ transwrap:所以不要用toast debug 10/30 15:49
24F:→ realmeat:是不会, 不过有的状况会挂 10/30 15:49
25F:→ realmeat:死机logcat会给讯息, toast在非主thread有时挂有时不会 10/30 15:50
26F:→ realmeat:有的时候秀出warnning, 有时就当掉了 10/30 15:51
27F:→ transwrap:我没试过toast在非main thread但是就算会动还是是很违规 10/30 15:52
28F:→ Ferich:找到问题了.. 就单纯把post()内的toast拿掉 就过了... 10/30 16:18
※ 编辑: Ferich 来自: 1.34.130.81 (10/31 09:26)