URL을로드하기 위해 사용자 지정 웹보기를 만들었습니다. 완벽하게로드되지만 백그라운드에서 30 초마다 다시로드하고 싶은 문제입니다.
ASYNC TASK에서 호출하려고 할 때마다 오류가 발생합니다. 이 문제를 해결하도록 도와주세요. 미리 감사드립니다. 아래 오류가 발생합니다.
java.lang.IllegalStateException : UI 스레드가 아닌 다른 스레드에서 View 메서드 호출
public class MPointAdvertiseView extends WebView {
private static final int DEFAULT_ADVERTISE_WIDTH = 320;
private static final int DEFAULT_ADVERTISE_HEIGHT = 50;
private static final int DEFAULT_BANNER_TYPE = 0;
private int mAdvertiseWidth = DEFAULT_ADVERTISE_WIDTH;
private int mAdvertiseHeight = DEFAULT_ADVERTISE_HEIGHT;
private String mAdvertiseID;
private int mAdvertiseType = DEFAULT_BANNER_TYPE;
public MPointAdvertiseView(Context context) {
super(context);
}
public MPointAdvertiseView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MPointAdvertiseView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MPointAdvertiseView, defStyleAttr, 0);
mAdvertiseWidth = a.getInteger(R.styleable.MPointAdvertiseView_banner_width, DEFAULT_ADVERTISE_WIDTH);
mAdvertiseHeight = a.getInteger(R.styleable.MPointAdvertiseView_banner_height, DEFAULT_ADVERTISE_HEIGHT);
mAdvertiseType = a.getInteger(R.styleable.MPointAdvertiseView_banner_type, DEFAULT_BANNER_TYPE);
mAdvertiseID = a.getString(R.styleable.MPointAdvertiseView_advertise_id);
a.recycle();
initializeView(context, mAdvertiseID);
}
public MPointAdvertiseView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void initializeView(final Context mContext, final String advertiseID) {
getSettings().setJavaScriptEnabled(true);
setWebViewClient(new WebViewClient());
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
loadAdvertise advertise = new loadAdvertise(mContext);
advertise.execute(advertiseID);
}
}, 30000);
}
public void load(String url) {
loadUrl(url);
}
public class loadAdvertise extends AsyncTask<String, Void, String> {
private Context mContext;
public loadAdvertise(Context mContext) {
this.mContext = mContext;
}
@Override
protected String doInBackground(String... params) {
String adsURL = MPointAdvertise.getInstance().initializeAdverise(mContext, params[0], mAdvertiseWidth, mAdvertiseHeight, mAdvertiseType);
return adsURL;
}
@Override
protected void onPostExecute(String adsURL) {
super.onPostExecute(adsURL);
loadUrl(adsURL);
}
}
}