Friday, September 7, 2012

[android-developers] Question about SurfaceView and Threads

Hello, I recently started learning development for android (Game development to be specific). And I came across the question, to which I couldn't find an answer.
So my question would be why does this work?:

public class MainActivity extends Activity{

OurView v;
TextView textView;
Random random;
int num = 0;
public void onCreate(Bundle bundle){
super.onCreate(bundle);
v = new OurView(this);
setContentView(v);
textView = (TextView) findViewById(R.id.textView);
random = new Random();
}
protected void onResume(){
super.onResume();
v.resume();
}
public class OurView extends SurfaceView implements Runnable{

Thread t = null;
SurfaceHolder holder;
boolean isItOK = false;
public OurView(Context context) {
super(context);
holder = getHolder();
}

public void run() {
while(isItOK == true){
if(!holder.getSurface().isValid())
continue;
Canvas canvas = holder.lockCanvas();
canvas.drawARGB(random.nextInt(256), random.nextInt(256), random.nextInt(256), random.nextInt(256));
holder.unlockCanvasAndPost(canvas);
}
}
public void resume(){
isItOK = true;
t = new Thread(this);
t.start();
}
public void pause(){
isItOK = false;
while(true){
try{
t.join();
}catch(Exception e){
e.printStackTrace();
}
break;
}
}
}
}



but this doesn't:


public class MainActivity extends Activity{

OurView v;
TextView textView;
Random random;
int num = 0;
public void onCreate(Bundle bundle){
super.onCreate(bundle);

setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
random = new Random();
v = new OurView(this);
}
protected void onResume(){
super.onResume();
v.resume();
}
public class OurView extends SurfaceView implements Runnable{

Thread t = null;
SurfaceHolder holder;
boolean isItOK = false;
public OurView(Context context) {
super(context);
holder = getHolder();
}

public void run() {
while(isItOK == true){

num++;
textView.setText(num);
}
}
public void resume(){
isItOK = true;
t = new Thread(this);
t.start();
}
public void pause(){
isItOK = false;
while(true){
try{
t.join();
}catch(Exception e){
e.printStackTrace();
}
break;
}
}
}
}



All I did is changed content view. And in threads run() method I changed textView's text to "num" variable which is incremented in each while cycle...

I don't understand why this doesn't work. Why this doesn't use AsyncTask but uses Just plain old thread. I heard that android doesn't support plain old Java threads. I'm totally confused, and don't understand anything. Could someone please explain what's happening here?





--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment