Sam*_*iya 29 multithreading android asynchronous
在我的应用程序中,在MainActivity中,有一个工作正常的线程.但是,当我调用另一个类从服务器获取数据时,我无法在线程上运行.请参阅下面的代码示例
class MainActivity extends Activity implements Runnable {
public void onCreate() {
new Thread(this).start();
}
public void run() {
//here is code for download data from server after completion this and in handler i m call other class in setdata() method....
}
public void setData() {
new CheckData(this);
}
}
class CheckData {
public CheckData(Context context) {
context.runUIonthread(){//cant call as runUIthread............
}
}
Run Code Online (Sandbox Code Playgroud)
Dav*_* T. 56
请参阅与UI线程进行通信的文章.
随着Context在手,你可以创建一个Handler在任何类.否则,您可以调用Looper.getMainLooper(),无论哪种方式,您都可以获得主UI线程.
例如:
class CheckData{
private final Handler handler;
public Checkdata(Context context){
handler = new Handler(context.getMainLooper());
}
public void someMethod() {
// Do work
runOnUiThread(new Runnable() {
@Override
public void run() {
// Code to run on UI thread
}
});
}
private void runOnUiThread(Runnable r) {
handler.post(r);
}
}
Run Code Online (Sandbox Code Playgroud)
The*_*rga 32
如果您不想传递上下文,这是一个解决方案:
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
// code goes here
}
});
Run Code Online (Sandbox Code Playgroud)
Sam*_*iya 12
class MainActivity extends Activity implements Runnable{
public void oncreate(){
new Thread(this).start();
}
public void run(){
//here is code for download data from server after completion this and in handler i m call other class in setdata() method....
}
public void setdata();
{
new checkData(this,MainActivity.this);
}
}
class checkData{
public void checkdata(Context context,MainActivity mainactivity){
mainactivity.runUIonthread()..is works fine for me.....
}
}
Run Code Online (Sandbox Code Playgroud)
Shu*_*ary 11
Activity是一个扩展Context的类.因此,无需传递上下文和活动.您可以将活动作为上下文传递,然后您可以使用上下文在UI线程上运行,如下所示:
((Activity) context).runOnUiThread(new Runnable() {
public void run() {
//Code goes here
}
});
Run Code Online (Sandbox Code Playgroud)
谨慎之处:只有当您确定上下文是一个活动上下文时才使用它,并且假设这不是一个好习惯.
您可能想看看AsyncTask.即使它不是最好的解决方案,它也会帮助您入门.
http://developer.android.com/reference/android/os/AsyncTask.html
编辑
我不明白为什么使用AsyncTask不是你的解决方案,但无论如何.您可以保存在UI线程中初始化的Handler类.然后使用此Handler,您可以以runnable的形式将消息回发到UI.因此,当您在UI线程中(在开始新线程之前)然后与其他类共享时,您需要做的就是实例化一个新的Handler对象.完成后,您可以使用该实例使用post方法将消息发布回UI线程.有关更多详细信息,请查看Handler类的文档:
http://developer.android.com/reference/android/os/Handler.html
| 归档时间: |
|
| 查看次数: |
41506 次 |
| 最近记录: |