拖动时MapView非常慢

时间:2019-06-13 09:09:25

标签: android android-fragments

这是我的应用程序的体系结构。

MainActivity 只是将MainFragment加载到其容器中的骨架。

MainFragment 包含一个按钮,单击后会添加MapsFragment。

MapsFragment 加载地图视图。它还将在其顶部显示一个自定义大小的对话框片段,并设置WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL以使该对话框片段为非模态。

enter image description here

如果从onResume内部启动,则MapsFragment mapview可以正常工作。 拖动时,这将非常慢

  1. 从Button的onClick启动,或

  2. 从onResume启动,延迟至少1ms。

这是我的录像 https://youtu.be/x7hFa4Ny4hM

在11s之前,一切都很好,因为它是从onResume启动的。 12秒后,由于mapview是从onClick启动的,因此它变得非常落后。

如果MapsFragment没有启动对话框片段,则mapview将正常工作。

如果延迟至少1毫秒,则地图会滞后。 请帮忙,因为我已经坚持了3天。 谢谢!

这是我的代码

class MapsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)

        supportFragmentManager.beginTransaction()
            .add(R.id.fragment_container, MainFragment.newInstance())
            .commit()
    }
}

// -------------------------

class MainFragment : DialogFragment(), View.OnClickListener {

    companion object {
        fun newInstance() = MainFragment()
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater.inflate(R.layout.main_fragment, container, false)
    }

    override fun onResume() {
        super.onResume()

        // if passing 0, 0, map will work fine, if passing at least 1 ms, map will be slow
        object : CountDownTimer(0, 0) {

            override fun onTick(millisUntilFinished: Long) {
                var left = millisUntilFinished / 1000
                button2.setText("$left")
            }

            override fun onFinish() {
                activity!!.supportFragmentManager.beginTransaction()
                .add(R.id.fragment_container, MapsFragment.newInstance())
                .addToBackStack(null)
                .commit()
            }

        }.start()
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
        button2.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        activity!!.supportFragmentManager.beginTransaction()
        .add(R.id.fragment_container, MapsFragment.newInstance())
        .addToBackStack(null)
        .commit()
    }
}

// -------------------------

class MapsFragment : DialogFragment() {

    companion object {
        fun newInstance() = MapsFragment()
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.maps_fragment, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
 AddCitiesFragment.newInstance().show(activity!!.supportFragmentManager)
    }
}

0 个答案:

没有答案