易网时代-编程资源站
Welcome
微信登录
首页
/
操作系统
/
Linux
/
Android软件开发之应用程序之间的通信介绍
Android 开发中在程序之间通讯的接口做的还是非常丰富的 本例主要向大家介绍程序之间是如何进行沟通,有哪几种沟通方式 如何来实现沟通。
1.使用handler传递消息
handler 大家可以把它想象成主线程(UI线程)的一个子线程,它可以给主线程(UI线程)发送数据从而更新主线程(UI线程)的UI与逻辑,handler 是一个子线程所以它的耗时操作不会阻塞主线程,大家都知道在android的开发中如果代码中某个地方阻塞主线程超过5秒的话系统会提示ANR (系统提示强制关闭)所以在耗时操作上我们可以考虑开启一个子线程避免ANR。 handler会向主线程发送消息 会以队列的形式排列着配合等待主线程更新UI 逻辑 等等。
下面这个例子诠释了这一点 利用handler传递消息来更新主线程的UI显示内容 点击按钮后每过一秒通过handler发送消息更新UI线程显示的时间 直到显示时间更新到10 然后结束这个线程。
public
class
HandlerActivity
extends
Activity
implements
Runnable{
/**更新时间**/
public
final
static
int
UPDATE_TIME =
0
;
/**更新时间成功**/
public
final
static
int
UPDATE_COMPLETED =
1
;
/**记录显示时间 超过10秒结束线程**/
private
int
mShowNumber =
0
;
/**开始计时按钮**/
private
Button mButton =
null
;
/**计时显示内容**/
private
TextView mTextView =
null
;
/**线程**/
private
Thread mThread =
null
;
/**线程关闭的标志**/
private
boolean
mRunning =
false
;
Handler handler =
new
Handler() {
@Override
public
void
handleMessage(Message msg) {
Bundle bundle= msg.getData();
//通过key的名称拿到它的值
String number = bundle.getString(
"number"
);
//msg.what为handler接收到的消息编号
switch
(msg.what) {
case
UPDATE_TIME:
mTextView.setText(
"正在更新时间"
+ number);
break
;
case
UPDATE_COMPLETED:
mTextView.setText(
"更新完毕"
);
break
;
}
super
.handleMessage(msg);
}
};
@Override
protected
void
onCreate(Bundle savedInstanceState) {
setContentView(R.layout.handler);
/**拿到button 与 TextView 对象**/
mButton = (Button)findViewById(R.id.button0);
mTextView = (TextView)findViewById(R.id.textView0);
mThread =
new
Thread(
this
);
mButton.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View arg0) {
/**点击按钮后开始线程开始计时**/
mRunning =
true
;
mThread.start();
}
});
mTextView.setText(
"点击按钮开始更新时间"
);
super
.onCreate(savedInstanceState);
}
public
void
ShowDialog(String string) {
AlertDialog.Builder builder =
new
AlertDialog.Builder(
HandlerActivity.
this
);
builder.setIcon(R.drawable.icon);
builder.setTitle(string);
builder.setPositiveButton(
"确定"
,
new
DialogInterface.OnClickListener() {
public
void
onClick(DialogInterface dialog,
int
whichButton) {
finish();
}
});
builder.show();
}
@Override
public
void
run() {
while
(mRunning) {
try
{
mShowNumber++;
/** 把须要的数据放入bandle中 **/
Bundle bandle =
new
Bundle();
bandle.putString(
"number"
, String.valueOf(mShowNumber));
/** 设置这条信息的编号为更新时间 **/
/** 将bandle写入message中 **/
/** 最后将这个message发送出去 **/
/** mShowNumber小于10更新时间 否则更新完毕 **/
Message msg =
new
Message();
if
(mShowNumber <=
10
) {
msg.what = UPDATE_TIME;
}
else
{
mRunning =
false
;
msg.what = UPDATE_COMPLETED;
}
msg.setData(bandle);
handler.sendMessage(msg);
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图