WebViewで何かページを表示した後、Backキー押下時エラーが発生します。
現在、調査中ですが、原因を見つけるアドバイスが欲しいです。

WebViewActivityクラスのsetupUri()に機能を追加してから発生しています。
追加した機能:WebViewで表示する為にリクエストされたURLを種類によって別のURLに上書きする。

機能の追加の仕方やソースの書き方が綺麗でないのは分かっているんですが、どのように整理したら良いか悩んでいます。

package jp.yahuu.hogehoge.app.activities

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.webkit.JavascriptInterface
import android.widget.Toast
import jp.yahuu.hogehoge.app.R
import jp.yahuu.hogehoge.app.advertising.AdvertisingIdentifierManager
import jp.yahuu.hogehoge.app.constants.Constants
import jp.yahuu.hogehoge.app.data.feed.user.User
import jp.yahuu.hogehoge.app.fragment.WebFragment
import jp.yahuu.hogehoge.app.proguardHelper.NonObfuscate
import jp.yahuu.hogehoge.app.web.*
import kotlin.properties.Delegates

//import kotlinx.android.synthetic.web_fragment.*

/**
 * Created by henrique on 2/13/15.
 */

//リスタートフラグ(ログアウト用)
var restartFlag: Boolean = false

public class WebViewActivity(var uri: Uri? = null): DefaultActivity() {

    //ログインページがリクエストされた場合に1になるフラグ
   // var loginPageFlag  = 0;





    private class WebViewFragment():
            WebFragment(),
            AdEventHandlerDelegate,
            FavorEventHandlerDelegate,
            ShareEventHandlerDelegate,
            NewPageEventHandlerDelegate,
            LoginPageEventHandlerDelegate,
            LogoutPageEventHandlerDelegate
    {
        private object KeyName {

            val Uri = "Uri"

        }

//        class Flag() {
//            //リスタートフラグ
//            var restartFlag: Boolean = false
//
//        }







        public companion object {
            //Function型 fun
            public fun newFragment(uri: Uri): WebViewFragment {

                val fragment = WebViewFragment()

                val args = Bundle()
                args.putString(KeyName.Uri, uri.toString())

                fragment.setArguments(args)

                return fragment

            }

        }

        private fun getWebViewActivity(): WebViewActivity {

            return getActivity() as WebViewActivity

        }

        override fun getEventHandlers(): Collection<EventHandler> {

            return arrayListOf(
                    AdEventHandler(this),
                    FavorEventHandler(this),
                    ShareEventHandler(this),
                    CurrentPageEventHandler(this),
                    NewPageEventHandler(this),
                    LoginPageEventHandler(this),
                    LogoutPageEventHandler(this)
            )

        }

        override fun setupWebView() {

            super<WebFragment>.setupWebView()

            webView.addJavascriptInterface(object: NonObfuscate {

                JavascriptInterface
                public fun startSharing(url: String, title: String) {

                    val intent = Intent(Intent.ACTION_SEND)
                    intent.setType("text/plain")
                    intent.putExtra(Intent.EXTRA_TEXT, title + "\n" + url)
                    intent.putExtra(Intent.EXTRA_SUBJECT, title)

                    startActivity(Intent.createChooser(intent, "共有"))

                }

            }, "Android")

        }

        // Delegates methods
        override fun openAd(uri: Uri) {

            openUri(uri)

        }

        private fun enfavor(identifier: Int) {

            User.addBookmark(identifier)

            Toast.makeText(getActivity(), "お気に入りに登録しました", Toast.LENGTH_LONG).show()

        }

        private fun defavor(identifier: Int) {

            User.removeBookmark(identifier)

            Toast.makeText(getActivity(), "お気に入りから削除しました", Toast.LENGTH_LONG).show()

        }

        override fun favorEvent(eventType: FavorEventType, identifier: Int) {

            when (eventType) {

                FavorEventType.Enfavor -> enfavor(identifier)
                FavorEventType.Defavor -> defavor(identifier)

            }

        }

        override fun shareEvent() {

            webView.loadUrl("javascript:Android.startSharing(get_actual_URL(),get_actual_title());")

        }

        //新しいアクティビティの場合?
        override fun openUriInNewPage(uri: Uri) {

            openUriInNewWebViewActivity(uri)


        }


        override fun showLoginPage() {

            val uri = Uri.parse("https://yahuu-ni.jp/users/sign_in")
            openUriInNewPage(uri)

        }






        override fun userWillLogout() {

            //クッキーを削除して、トップ画面に遷移する。

            println("ログアウトをタッチした。")

            val uri = Uri.parse("https://yahuu-ni.jp/logout")
            openUriInNewPage(uri)

            restartFlag = true


//            //再起動フラグを上げる
//            restart()

//            //ダイアログでログアウトを選択した場合?
//            userDidLogout()

//            val uri = Uri.parse("https://yahuu-ni.jp/logout")
//            openUriInNewPage(uri)

        }



        override fun userDidLogout() {
            println("userDidLogout")
        }

    }

    private object RegexPattern {

        val ArticlePattern = "-?\\d+(\\.\\d+)?"

    }

    private val articleRegex by Delegates.lazy {

        WebViewActivity.RegexPattern.ArticlePattern.toRegex()

    }

    private fun setupUri() {



            if (this.uri == null) {

                //varは通常の変数
                var u = getIntent()
                        .getStringExtra(
                                getResources()
                                        .getString(R.string.default_webview_activity_uri)
                        )
                println("u: $u")

                //トップページがリクエストされた場合
                //ログイン後遷移http://yahuu-ni.jp/,アプリ起動時https://yahuu-ni.jp/

                //ログアウト後遷移https://yahuu-ni.jp/

                    if(u.equals("http://yahuu-ni.jp/") || u.equals("https://yahuu-ni.jp/")){
                       //上書きuri
                        u = "http://yahuu-ni.jp/mypage"
                    }



                    //urlがnullじゃない場合
                    if (u != null) {


                        //もしuがnullの場合NullPointerException
                        val parsedUri = Uri.parse(u)

                        //ドメインがやほー(teru or false)
                        val ishogehoge = Constants.ishogehogeDomain(parsedUri
                        )


                        //ドメインがやほーの場合
                        val newUri: Uri = if (ishogehoge) {


                            println("parsedUri: $parsedUri")
                            println("articleRegex: $articleRegex")


                            // ログイン済みの場合、「https://yahuu-ni.jp/」が再リクエストされてここ落ちる
                            //パス部がnull
                            //parsedUri → https://yahuu-ni.jp/users/sign_in isArticle:false
                            val isArticle = parsedUri.getLastPathSegment().matches(articleRegex)
                            println("isArticle: $isArticle")

                            //article(記事)の場合?
                            val builder: Uri.Builder = if (isArticle) {

                                val identifier = parsedUri.getLastPathSegment().toInt()

                                User.addHistory(identifier)

                                val favored = User.containsInBookmark(identifier)

                                val flag = if (favored) {
                                    1
                                } else {
                                    0
                                }

                                parsedUri.buildUpon()
                                        .appendQueryParameter("favored", "$flag")


                                //記事以外の場合
                            } else {


                                parsedUri.buildUpon()

                            }

                            builder.appendQueryParameter(
                                    "idfa",
                                    AdvertisingIdentifierManager.information.identifier
                            ).build()

                        } else {

                            parsedUri

                        }

                        this.uri = newUri

                        println("new Uri: $newUri")



                    }



            }


    }


    //リスタート処理
    private fun restart(){
        println("restart")
        if (restartFlag) {
//            //fragmentの終了 onDestroyが呼び出される
////            getFragmentManager().beginTransaction().remove(this).commit()
//
////            getFragmentManager().popBackStack()
//            activity.finish();



            val intent = getIntent()
            overridePendingTransition(0, 0)
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
            finish()
            overridePendingTransition(0, 0)

            startActivity(intent)


        }
    }

    /***
     * Fragmentが破棄される時、最後に呼び出される
     */
    @Override
    override fun onDestroy() {
//     まずはデストロイを走らせる、アクティビティのフィニッシュか?fragmentか?   http://attyo0.blog.fc2.com/blog-entry-9.html

        println("onDestroy")
        if (restartFlag) {
            restartFlag = false;
            //ここにメインアクティビティのインテント

            //            val intent = Intent(getApplicationContext(), javaClass<MainActivity>())
            ////            intent.putExtra(getResources().getString(R.string.default_webview_activity_uri), uri.toString())
            //
            //            startActivity(intent)
            println("ここにメインアクティビティのインテント")
        }
    }


    override fun onCreate(savedInstanceState: Bundle?) {

        super<DefaultActivity>.onCreate(savedInstanceState)
        setContentView(R.layout.activity_webview)

        //ログアウト
        if (restartFlag) {
            println("restart() アプリ再起動")
            restart()
        }

        println("setupUri()")
        setupUri()

        if (savedInstanceState == null) {

            val newFragment = WebViewFragment.newFragment(uri!!)

            getFragmentManager()
                    .beginTransaction()
                    .add(R.id.web_view_container, newFragment)
                    .commit()

        }

        getSupportActionBar().hide()

    }



}

↓↓↓↓↓↓↓↓↓↓↓↓↓↓エラーログ↓↓↓↓↓↓↓↓↓↓↓↓↓↓

09-28 12:04:47.297  13985-13985/jp.yahuu.hogehoge.app I/System.out﹕ onDestroy
09-28 12:04:47.297  13985-13985/jp.yahuu.hogehoge.app D/AndroidRuntime﹕ Shutting down VM
09-28 12:04:47.297  13985-13985/jp.yahuu.hogehoge.app E/CrashReporting﹕ ParseCrashReporting caught a SuperNotCalledException exception for jp.yahuu.hogehoge.app. Building report.
09-28 12:04:47.300  13985-13985/jp.yahuu.hogehoge.app E/CrashReporting﹕ Handling exception for crash
    android.util.SuperNotCalledException: Activity {jp.yahuu.hogehoge.app/jp.yahuu.hogehoge.app.activities.WebViewActivity} did not call through to super.onDestroy()
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3695)
            at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3724)
            at android.app.ActivityThread.access$1400(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
09-28 12:04:47.300  13985-13985/jp.yahuu.hogehoge.app D/CrashReporting﹕ Generating report file for crash
    --------- beginning of system
09-28 12:04:47.395  13985-13985/jp.yahuu.hogehoge.app W/ge.hogehoge.app﹕ type=1400 audit(0.0:58): avc: denied { read } for name="mem" dev="debugfs" ino=443991 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:debugfs:s0 tclass=file
09-28 12:04:47.395  13985-13985/jp.yahuu.hogehoge.app W/ge.hogehoge.app﹕ type=1400 audit(0.0:59): avc: denied { read } for name="mem" dev="debugfs" ino=443991 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:debugfs:s0 tclass=file
09-28 12:04:47.471  13985-13985/jp.yahuu.hogehoge.app D/CrashReporting﹕ Retrieving logcat output...
09-28 12:04:47.526  13985-13985/jp.yahuu.hogehoge.app D/CrashReporting﹕ Retrieving logcat output...
09-28 12:04:47.576  13985-13985/jp.yahuu.hogehoge.app D/CrashReporting﹕ Retrieving logcat output...
09-28 12:04:47.653  13985-13985/jp.yahuu.hogehoge.app V/CrashReporting﹕ About to start ReportSenderWorker from #handleException
09-28 12:04:47.657  13985-15035/jp.yahuu.hogehoge.app D/CrashReporting﹕ #checkAndSendReports - start
09-28 12:04:47.657  13985-15035/jp.yahuu.hogehoge.app D/CrashReporting﹕ Looking for error files in /data/data/jp.yahuu.hogehoge.app/files/com.parse/cr/reports
09-28 12:04:47.657  13985-15035/jp.yahuu.hogehoge.app D/CrashReporting﹕ Loading file 1443409487300-SuperNotCalledException-10.stacktrace
09-28 12:04:47.664  13985-15035/jp.yahuu.hogehoge.app I/CrashReporting﹕ Sending file 1443409487300-SuperNotCalledException-10.stacktrace
09-28 12:04:47.664  13985-15035/jp.yahuu.hogehoge.app D/CrashReporting﹕ Sending crash report to Parse...
09-28 12:04:47.667  13985-15035/jp.yahuu.hogehoge.app D/CrashReporting﹕ #checkAndSendReports - finish
    --------- beginning of crash
09-28 12:04:47.755  13985-13985/jp.yahuu.hogehoge.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: jp.yahuu.hogehoge.app, PID: 13985
    android.util.SuperNotCalledException: Activity {jp.yahuu.hogehoge.app/jp.yahuu.hogehoge.app.activities.WebViewActivity} did not call through to super.onDestroy()
            at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3695)
            at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3724)
            at android.app.ActivityThread.access$1400(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)