现在我有一个线程填充了我的活动视图。但是我希望另一个线程在同一个活动中添加一些textview和imageview。我正在使用SurfaceView,我在其中创建了这个线程,我不知道如何添加另一个线程,以便它可以为当前活动的视图做出贡献。
帮帮我..
MyView view;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
view = new MyView(this);
setContentView(view);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
view.pause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
view.resume();
}
public class MyView extends SurfaceView implements Runnable {
Thread threadstill = null;
boolean isitok = false;
SurfaceHolder holder;
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
holder = getHolder();
}
@Override
public void run() {
// TODO Auto-generated method stub
while (isitok == true) {
if (!holder.getSurface().isValid()) {
continue;
}
canvas = holder.lockCanvas();
canvas.drawARGB(255, 255, 255, 255);
canvas.drawBitmap(<bitmapimage>, x, y, null);
holder.unlockCanvasAndPost(canvas);
}
}
public void pause() {
isitok = false;
while (true) {
try {
threadstill.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
threadstill = null;
}
public void resume() {
isitok = true;
threadstill = new Thread(this);
threadstill.start();
}
}
答案 0 :(得分:1)
您不能直接从另一个线程操纵用户界面。 主线程负责所有UI更改。 但是,如果您想在后台执行一些昂贵的工作(例如加载图片),您可以将结果发送到UI线程。
Hava查看官方文档:https://developer.android.com/training/multiple-threads/communicate-ui.html
或者在一个类似的问题上:How can I manipulate main thread UI elements from another thread in Android?
答案 1 :(得分:0)
我不确切地知道你的问题是什么,但对于I don't know how to add another thread so that it can contribute to the view of the current activity.
你可以使用嵌套类轻松创建一个新线程...只需调用:
Thread myNewThread = new Thread(new Runnable() {
public void run() {
//do code here
}
}).start();
但请注意,您只能更改UIThread
的观看次数,因此我会向您推荐AsyncTask
:
public void myAsyncTask exstends Asynctask<Void,Void,Void> {
....
}
AsyncTask附带了几个methods
most important
是doInBackground
,您可以执行Network Connections
之类的重要内容或其他会冻结UI的内容,或者根本不会在UIThread(网络资料)上允许。
doInBackground
完成后调用onPostExecute
,UiThread
会在{{1}}上运行,您可以在其中处理视图的更改。
要获取更多信息,请查看此链接:
http://developer.android.com/reference/android/os/AsyncTask.html
希望它有所帮助,这就是你要求的。 ;)
答案 2 :(得分:0)
使用AsyncTask类执行此操作。在doInBackground方法下载图像,并在onPostExecute方法中将图像应用于ImageView。
您可以使用我的课程或自己创作。