线程的挂起与唤醒之实现app加载广告点击跳转功能
来源:互联网 发布:阿里云ntp服务器地址 编辑:程序博客网 时间:2024/05/16 12:12
在实现app添加启动广告轮换、点击跳转过程中碰到各种问题,有点击第一张图跳转后返回已经跑进主界面不显示其它广告图的情况(因为没有在跳转的时候把线程挂起),有点击广告跳转返回后不继续跳转到下一张广告图的情况(在onResume方法中没有调用notify()方法),也有点击最后一直广告图返回不了的情况(这个不知道什么原因,好像是因为把线程休眠写在后面导致的),最后参考网上的资料调试终于解决,实现功能。关于线程挂起与唤醒参考:http://blog.sina.com.cn/s/blog_4c0706560101175r.html,具体实现代码如下:
public class LogoActivity extends BaseActivity implements Runnable {
int num = 0;
boolean flag = true;
Bitmap[] bitmaps;
ImageView image;
private boolean suspendFlag = false;// 控制线程的执行状态
String[] url = { "http://www.10010.com/goodsdetail/511405139289.html",
"http://www.10010.com/tesla",
"http://www.10010.com/goodsdetail/981410108357.html" };
int logoId[] = { R.drawable.logo1, R.drawable.logo2, R.drawable.logo3 };
Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
image.setBackgroundResource(logoId[num]);
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.logo);
Resources res = getResources();
bitmaps = new Bitmap[3];
for (int i = 0; i < bitmaps.length; i++) {
bitmaps[i] = BitmapFactory.decodeResource(res, logoId[i]);
}
image = (ImageView) this.findViewById(R.id.logo);
Thread thread = new Thread(this);
thread.start();
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
link(url[num]);
}
});
}
private void link(String str) { //调用浏览器加载广告页
// TODO Auto-generated method stub
String adress = str; // web address
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(adress));
startActivity(intent);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
suspend();
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
resume();
super.onResume();
}
public void suspend() { //线程暂停
this.suspendFlag = true;
}
public synchronized void resume() { //唤醒线程
this.suspendFlag = false;
this.notify();
}
public void run() {
// TODO Auto-generated method stub
while (flag) {
try {
Thread.sleep(2000L);
synchronized (this) { //同步代码块控制线程状态
while (suspendFlag) {
wait();
}
}
if (num < bitmaps.length - 1) {
num++;
handler.sendEmptyMessage(1);
} else {
flag = false;
Intent it = new Intent(LogoActivity.this,
WelcomeActivity.class);
startActivity(it);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
finish();
}
}
0 0
- 线程的挂起与唤醒之实现app加载广告点击跳转功能
- 线程的挂起与唤醒之实现app加载广告点击跳转功能
- Linux 线程挂起与唤醒功能 实例
- Java线程的挂起与唤醒
- 根据Linux 线程挂起与唤醒原理,实现Sleep的暂停与继续
- 线程的挂起和唤醒
- 线程的挂起和唤醒
- Java 多线程使用:线程的挂起与重新唤醒
- Java 多线程使用:线程的挂起与重新唤醒
- C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)
- 线程的挂起,唤醒和终止
- C++ 线程的创建,挂起,唤醒,终止
- C++ 线程的创建,挂起,唤醒,终止
- java 线程的挂起和唤醒
- VC线程的挂起及唤醒
- MFC线程的挂起、唤醒和终止
- linux线程的挂起和唤醒
- windows线程挂起与唤醒,SuspendThread与ResumeThread的一些相关问题
- 两种方法,针对EditText密码的显示和隐藏(包括激将光标移动到文本末尾)
- Socket编程-TCP三次握手
- Python缺失的{},永远的痛
- HLSL基础
- tenth(1000以内偶数和,其一)
- 线程的挂起与唤醒之实现app加载广告点击跳转功能
- versions在优胜美地系统的不稳定解决方案
- kali linux arp劫持
- ubuntu下配置java环境
- 安卓小技巧专栏(一)@TargetAPI + 版本判断实现高低API版本兼容
- MySQL数据类型和java数据类型
- 给大家讲解。数据结构篇(一) 动态数组ngx_array_t
- openssl提取pfx证书密钥对
- 虾米音乐Qt版下载器之Location解密部分