abstract class BaseActivity : FragmentActivity() { private var dialog : ProgressDialog ?= null var mHandler : Handler ?= null private var sUncaughtExceptionHandler : Thread.UncaughtExceptionHandler ?= null private var file : File ?= null private var Tag : String = "BaseActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(getLayout()) myApplicaion.context = this myApplicaion.baseActivity = this //沉浸式状态栏 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){ window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) //设置App主题颜色 window.setStatusBarColor(resources.getColor(R.color.colorPrimary)) } //初始化布局,并适配 var view : View ?= null view = View.inflate(this,getLayout(),null) AutoUtils.setSize(this, false, 750, 1334) AutoUtils.auto(view) setContentView(view) //禁止横屏 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) //禁止键盘挤压布局 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) mHandler = Handler() //初始化控件 initView() //执行逻辑 initData() //Adapter的内容 initAdapter() //上线前解开 Handler(Looper.getMainLooper()).post { //主线程异常拦截 while (true) { try { Looper.loop()//主线程的异常会从这里抛出 } catch (e: Throwable) { } } } sUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler() //所有线程异常拦截,由于主线程的异常都被我们catch住了,所以下面的代码拦截到的都是子线程的异常 Thread.setDefaultUncaughtExceptionHandler { t, e -> Log.e(Tag,t.toString() + e.toString()) } } //显示加载圈 fun showLoading(){ if(dialog!!.isShowing){ return } dialog = ProgressDialog(this) dialog!!.requestWindowFeature(Window.FEATURE_NO_TITLE) dialog!!.setCanceledOnTouchOutside(false) dialog!!.setProgressStyle(ProgressDialog.STYLE_SPINNER) dialog!!.setMessage("正在加载") dialog!!.show() } //加载圈消失 fun dismissLoading() { if (dialog!!.isShowing()) { dialog!!.dismiss() } } override fun onDestroy() { super.onDestroy() dialog!!.dismiss() } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) val fragmentManager = supportFragmentManager for (indext in 0 until fragmentManager.fragments.size) { val fragment = fragmentManager.fragments[indext] //找到第一层Fragment if (fragment == null) Log.w( Tag, "Activity result no fragment exists for index: 0x" + Integer.toHexString( requestCode ) ) else handleResult(fragment, requestCode, resultCode, data) } } //递归调用,对所有的子Fragment生效 private fun handleResult(fragment: Fragment?, requestCode: Int, resultCode: Int, data: Intent?) { fragment!!.onActivityResult(requestCode, resultCode, data)//调用每个Fragment的onActivityResult Log.e(Tag, "BaseFragmentActivity") val childFragment = fragment.getChildFragmentManager().fragments //找到第二层Fragment if (childFragment != null) for (f in childFragment) if (f != null) { handleResult(f, requestCode, resultCode, data) } if (childFragment == null) Log.e(Tag, "BaseFragmentActivity1111") } abstract fun initAdapter() abstract fun initData() abstract fun initView() abstract fun getLayout() : Int companion object{ class myHandler : Handler(){ //使用弱引用防止内存泄漏 var activityWeakReference : WeakReference<BaseActivity> ?= null fun myHandler(activity: BaseActivity){ this.activityWeakReference = WeakReference<BaseActivity>(activity) } override fun handleMessage(msg: Message) { super.handleMessage(msg) activityWeakReference?.get()?.mHandler?.handleMessage(msg) } } } }
Kotlin版BaseActivity
最新推荐文章于 2025-03-17 22:07:53 发布