Android: ANR, 스레드 간 통신, Handler, 메시지
public class MainActivity extends Activity implements OnClickListener
{
TextView textView = null;
private ProgressBar mProgress_yuan;
private ProgressBar mProgress_jindu;
private final int MSG_WHAT_DOWNLOAD = 1;
private final int MSG_WHAT_UPDATE = 2;
private final int MSG_WHAT_PROGRESS = 3;
private Handler mHandler = new Handler()// Handler main , main
{
@Override
public void handleMessage(Message msg)// handleMessage
{
switch (msg.what)
{
case MSG_WHAT_DOWNLOAD:
Data data = (Data) msg.obj;
textView.setText(data.toString());
mProgress_jindu.setVisibility(View.GONE);// ,
break;
case MSG_WHAT_UPDATE:
String str = (String) msg.obj;
textView.setText(str);
mProgress_yuan.setVisibility(View.GONE);// ,
break;
case MSG_WHAT_PROGRESS:
int arg = msg.arg1;
mProgress_jindu.setProgress(arg);// ,
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
textView = (TextView) findViewById(R.id.textView1);
mProgress_yuan = (ProgressBar) findViewById(R.id.progressBar1);
mProgress_jindu = (ProgressBar) findViewById(R.id.progressBar2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.button1:
btn1Click();
break;
case R.id.button2:
btn2Click();
break;
default:
break;
}
}
private void btn1Click()// ,10 ,
{
mProgress_jindu.setVisibility(View.VISIBLE);// (xml )
new Thread()
{
@Override
public void run()
{
Message message = new Message();
message.what = MSG_WHAT_DOWNLOAD; //
message.obj = download();// msg,
mHandler.sendMessage(message);// Handler msg
}
}.start();
}
private void btn2Click()// , ,3 ,
{
mProgress_yuan.setVisibility(View.VISIBLE);
new Thread()
{
@Override
public void run()
{
try
{
Thread.sleep(3000);
String str = update();
//Message msg = mHandler.obtainMessage(what, obj)
//
Message msg = new Message();
msg.what = MSG_WHAT_UPDATE;
msg.obj = str;
mHandler.sendMessage(msg);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}.start();
}
private Data download()
{
for (int i = 0; i < 10; i++)//
{
//Message msg = new Message();
Message msg = mHandler.obtainMessage();// msg, msg
msg.what = MSG_WHAT_PROGRESS;
msg.arg1 = i * 10;
mHandler.sendMessage(msg);// main
try
{
Thread.sleep(1000);// 10
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
Data data = new Data(" !", 12);
return data;
}
private String update()
{
return " !";
}
class Data
{
String name;
int num;
public Data(String name, int num)
{
super();
this.name = name;
this.num = num;
}
@Override
public String toString()
{
return "data [name=" + name + ", num=" + num + "]";
}
}
}
본고는'하늘에 흔적은 없지만 나는 날아간다'블로그에서 나온 것으로 작가에게 연락하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IAlertNotifyHandler를 통해 Alert Email을 정의하는 방법사용자 정의 Alert email, 모양만 수정하는 것이 아니라 내용의 출력을 제어해야 합니다 전체 코드는 다음과 같습니다. 3. SharePoint Server의 GAC에 dll을 배치합니다. 4. C:\Progr...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.