package my.realtyServe.Pkg;
import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.content.Intent; import android.widget.Toast; import android.util.Log;
public class ServeWebAct extends Activity {
WebView mWebView;
Intent intent;
private ProgressDialog progressDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.serveweblayout);
intent = getIntent();
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true); // 웹뷰에서 자바스크립트실행가능
mWebView.loadUrl("intent.getStringExtra("linkUrl"));
mWebView.setWebViewClient(new HelloWebViewClient()); // WebViewClient 지정
findViewById(R.id.home).setOnClickListener(mClickListener);
}
ImageView.OnClickListener mClickListener = new ImageView.OnClickListener() {
Intent intent;
public void onClick(View v) {
switch (v.getId()) {
case R.id.home:
intent = new Intent(ServeWebAct.this,ServeMainAct.class);
break;
case R.id.maemul:
intent = new Intent(ServeWebAct.this,ServeMainAct.class);
break;
}
startActivity(intent);
finish();
}
};
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl("url);
if(url.equals("http://m.serve.co.kr/m/")){
intent = new Intent(ServeWebAct.this,ServeMainAct.class);
startActivity(intent);
Log.d("test","shouldOverrideUrlLoading");
finish();
}
return true;
}
public void onLoadResource (WebView view, String url) {
Log.d("test","onLoadResource");
if (progressDialog == null) {
progressDialog = new ProgressDialog(ServeWebAct.this);
progressDialog.setMessage("데이터를 불러오고 있습니다.");
progressDialog.show();
}
}
public void onPageFinished(WebView view, String url) {
if (progressDialog.isShowing()) {
Log.d("test","onPageFinished");
progressDialog.dismiss();
progressDialog = null;
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
Toast.makeText(ServeWebAct.this, "로딩오류:"+description, Toast.LENGTH_SHORT).show();
}
}
}
몇일 동안 구글링 했지만 정말 찾지를 못했습니다 여러분 도와주세요~~~
제가 몇일 동안 파악해 해본 결과 문제는
webview 에서 웹페이지를 불러오고 웹 페이지 특정 아이콘을 클릭했을 경우 메인 액티비티로 가는 부분을 구현하였습니다
그런데 문제는 progressDialog로그가 돌고 있는 상태에서
메인 액티비티로 가기 위해 intent를 생성하고 메인 액티비티로 이동후
webview 가 있는 액티비티를 finish(); 한이후에
메인 액티비티가 화면에 나타난 후 조금 있다가 오류가 나버립니다
webwiew 가 있는 액티비티에서 메인 엑티비티로 넘어갈때
onPageFinished 메소드 부분에서 progressDialog.dismiss(); 하는 부분에서 오류가 발생하는거 같습니다
progressDialog 로그를 구현하는 부분을 제거하면 오류는 발생하지 않습니다
INFO/ActivityManager(2434): Starting activity: Intent { cmp=my.realtyServe.Pkg/.ServeMainAct }
DEBUG/test(15096): shouldOverrideUrlLoading
WARN/ActivityManager(2434): Trying to launch my.realtyServe.Pkg/.ServeMainAct
DEBUG/test(15096): onLoadResource
VERBOSE/AudioFlinger(2322): getNextBuffer() no more data for track 4099 on thread 0x2f1e8
VERBOSE/SoundPool(2434): stopping track
VERBOSE/SoundPool(2434): stop
VERBOSE/AudioTrack(2434): stop 0x3caf48
VERBOSE/AudioFlinger(2322): stop(4099), calling thread 2434
VERBOSE/AudioFlinger(2322): (> STOPPED) => STOPPED (4099) on thread 0x2f1e8
VERBOSE/AudioPolicyManager(2322): stopOutput() output 1, stream 1
VERBOSE/AudioPolicyManager(2322): changeRefCount() stream 1, count 0
VERBOSE/AudioPolicyManager(2322): getNewDevice() selected device 0
VERBOSE/AudioPolicyManager(2322): setOutputDevice() output 1 device 0 delayMs 0 force 0
VERBOSE/AudioPolicyManager(2322): setOutputDevice() setting same device 0 or null device for output 1
VERBOSE/SoundPool(2434): done(256)
VERBOSE/SoundPool(2434): move to front
DEBUG/test(15096): onLoadResource
DEBUG/test(15096): onLoadResource
DEBUG/test(15096): onLoadResource
VERBOSE/AudioFlinger(2322): TrackBase::reset
DEBUG/test(15096): onLoadResource
INFO/ActivityManager(2434): Displayed activity my.realtyServe.Pkg/.ServeMainAct: 410 ms (total 410 ms)
ERROR/WindowManager(15096): Activity my.realtyServe.Pkg.ServeWebAct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@47f969b8 that was originally added here
ERROR/WindowManager(15096): android.view.WindowLeaked: Activity my.realtyServe.Pkg.ServeWebAct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@47f969b8 that was originally added here
ERROR/WindowManager(15096): at android.view.ViewRoot.<init>(ViewRoot.java:247)
ERROR/WindowManager(15096): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
ERROR/WindowManager(15096): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
ERROR/WindowManager(15096): at android.view.Window$LocalWindowManager.addView(Window.java:424)
ERROR/WindowManager(15096): at android.app.Dialog.show(Dialog.java:241)
ERROR/WindowManager(15096): at my.realtyServe.Pkg.ServeWebAct$HelloWebViewClient.onLoadResource(ServeWebAct.java:78)
ERROR/WindowManager(15096): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:387)
ERROR/WindowManager(15096): at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/WindowManager(15096): at android.os.Looper.loop(Looper.java:123)
ERROR/WindowManager(15096): at android.app.ActivityThread.main(ActivityThread.java:4632)
ERROR/WindowManager(15096): at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/WindowManager(15096): at java.lang.reflect.Method.invoke(Method.java:521)
ERROR/WindowManager(15096): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
ERROR/WindowManager(15096): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ERROR/WindowManager(15096): at dalvik.system.NativeStart.main(Native Method)
DEBUG/test(15096): onPageFinished
DEBUG/AndroidRuntime(15096): Shutting down VM
WARN/dalvikvm(15096): threadid=1: thread exiting with uncaught exception (group=0x4001d828)
ERROR/AndroidRuntime(15096): FATAL EXCEPTION: mainpackage my.realtyServe.Pkg;ERROR/AndroidRuntime(15096): java.lang.IllegalArgumentException: View not attached to window manager
ERROR/AndroidRuntime(15096): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
ERROR/AndroidRuntime(15096): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
ERROR/AndroidRuntime(15096): at android.view.Window$LocalWindowManager.removeView(Window.java:432)
ERROR/AndroidRuntime(15096): at android.app.Dialog.dismissDialog(Dialog.java:278)
ERROR/AndroidRuntime(15096): at android.app.Dialog.access$000(Dialog.java:71)
ERROR/AndroidRuntime(15096): at android.app.Dialog$1.run(Dialog.java:111)
ERROR/AndroidRuntime(15096): at android.app.Dialog.dismiss(Dialog.java:268)
ERROR/AndroidRuntime(15096): at my.realtyServe.Pkg.ServeWebAct$HelloWebViewClient.onPageFinished(ServeWebAct.java:87)
ERROR/AndroidRuntime(15096): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:281)
ERROR/AndroidRuntime(15096): at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(15096): at android.os.Looper.loop(Looper.java:123)
ERROR/AndroidRuntime(15096): at android.app.ActivityThread.main(ActivityThread.java:4632)
ERROR/AndroidRuntime(15096): at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(15096): at java.lang.reflect.Method.invoke(Method.java:521)
ERROR/AndroidRuntime(15096): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
ERROR/AndroidRuntime(15096): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ERROR/AndroidRuntime(15096): at dalvik.system.NativeStart.main(Native Method)
WARN/ActivityManager(2434): Force finishing activity my.realtyServe.Pkg/.ServeMainAct




글쎄요.. 정확한 이유는 모르겠지만..
엑티비티가 destroy되고나서 다이얼로그를 dissmiss하니 나는 에러같다는 느낌이;;;
finish를 onPageFinished안에 넣어보시거나
if
(progressDialog ==null) { 를try catch문으로 바꾼뒤 finish를 해보심이;