您的位置:首页 > 其它

安卓handler使用(不使用Message与没有复写Handler)

2018-02-27 21:01 405 查看

安卓handler使用(不使用Message与没有复写Handler)

安卓handler使用不使用Message与没有复写Handler
使用handler随机显示图片
2秒后只运行一次

开始后3秒换图片之后就2秒后换

算是一种错误的写法

使用handler随机显示图片

2秒后只运行一次

下面的例子中只随机显示一次

package com.linyb.timer;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;

import java.util.Random;

public class MainActivity extends AppCompatActivity {
ImageView imageView;
int[] ImageArray = new int[]{R.mipmap.aaa, R.mipmap.bbb, R.mipmap.ccc, R.mipmap.ic_launcher_round, R.mipmap.ic_launcher};
int i = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);

final Random random = new Random();
final Handler handler = new Handler();

handler.postDelayed(new Runnable() {
@Override
public void run() {
imageView.setImageResource(ImageArray[random.nextInt(5)]);//产生0-4的随机数,不包括5  )
Log.d("in handler", "run: 3");
}

}, 2000);

Log.d("not in handler", "run:out handler");
}

}


开始后3秒换图片,之后就2秒后换

package com.linyb.timer;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;

import java.util.Random;

public class MainActivity extends AppCompatActivity{
ImageView imageView;
int[] ImageArray = new int[]{R.mipmap.aaa, R.mipmap.bbb, R.mipmap.ccc, R.mipmap.ic_launcher_round, R.mipmap.ic_launcher};

final Random random = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
final Handler handler2 = new Handler();
handler2.postDelayed(new Runnable() {
@Override
public void run() {
handler2.postDelayed(this,2000);
imageView.setImageResource(ImageArray[random.nextInt(5)]);//产生0-4的随机数,不包括5  )
}
}, 3000);
}
}


算是一种错误的写法

package com.linyb.timer;

import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;

import java.util.Random;

public class MainActivity extends AppCompatActivity{
ImageView imageView;
int[] ImageArray = new int[]{R.mipmap.aaa, R.mipmap.bbb, R.mipmap.ccc, R.mipmap.ic_launcher_round, R.mipmap.ic_launcher};
final Handler handler2 = new Handler();
final Random random = new Random();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
handler2.postDelayed(new Runnable() {
@Override
public void run() {
handler2.postDelayed(this,2000);
imageView.setImageResource(ImageArray[random.nextInt(5)]);//产生0-4的随机数,不包括5  )
handler2.postDelayed(this,5000);
Log.d("run", "run: "+handler2.toString());
}
}, 3000);
}

//要加上不然返回键还在运行
@Override
protected void onDestroy() {
super.onDestroy();
System.exit(0);
}
}


会出现ANR,不过不确定出现ANR原因是不是因为下面这样解释

这种写法的后果是:运行后

3秒后设置
当前的handle为每2秒运行一次


并更改图片

再将
当前的handle为每2秒运行一次
这个每5秒运行一次

跑久了后相当于handle是不停运行的,将出现
ANR
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐