Использование обработчика представляется правильным подходом, поскольку вы обновляете свой пользовательский интерфейс из потока, не являющегося пользовательским интерфейсом (по крайней мере, так должно быть!) ... Вы можете использовать обработчик, как этот, или выполнять обработку данных из вашегоАктивность и вызов CustomView.draw () из Обработчика в вашей Активности.
public class CustomView extends View {
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public CustomView(Context context) {
super(context);
...
startThread();
...
}
@Override
public void onDraw(Canvas canvas) {
...
//Do drawing...canvas.drawBitmap(bitmap) or w/e
...
}
private void startThread() {
Thread thread = new Thread() {
public void run() {
try {
doSocketRequest();
} catch (SocketException e) { // Or w/e exceptions are applicable
e.printStackTrace();
} finally {
Message msg = new Message();
//msg.obj = ObjectContainingInformationTheHandlerMightNeed
mHandler.sendMessage(msg);//replace 0 w/ a message if need be
}
}
};
}
private void doSocketRequest() {
...
//Do your socket stuff here
...
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
...
//Do graph processing stuff
...
invalidate(); //forces onDraw
}
};
}