gpt4 book ai didi

Android、scala 和 eclipse = 不稳定的混合

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:01 25 4
gpt4 key购买 nike

最近,我使用 Eclipse 使用 Scala 编写了一些 Android 应用程序。一切都很好,直到我的程序只有几节课/Activity 。当我添加更多代码时,JVM 开始崩溃,eclipse 经常死机,adb 不断失去连接。任务管理器显示 Java 进程正在占用 800 到 1300 MB 的内存!

我的电脑硬件参数不错,i7 3rd gen, 8GB DDR3 和 SSD 256。所以这不是原因。

我的软件也是最新的,包括最新版本的 Eclipse、Android SDK、Scala 和 Java 开发工具包,以及所有用于 eclipse 的插件。 -vmargs 是为 scala 开发配置的,但它根本没有帮助。所以我将其作为问题的原因消除了。

当我用 Java 重写我的代码时,一切都很顺利,我可以继续我的项目。

有没有人找到在 Android 项目中使用 scala 的解决方案?我在这里和谷歌群组上阅读了几个类似的主题,但没有关于这个问题的答案。

编辑:

我使用 visual vm 分析了我的代码,但堆空间使用情况正常。这是我的一些代码 fragment 。

imports ...

class MainActivity extends FragmentActivity {
private lazy val timePicker = findViewById(R.id.timePicker).asInstanceOf[TimePicker]
private lazy val spinner_sourceBank = findViewById(R.id.spinnerSource).asInstanceOf[Spinner]
private lazy val spinner_targetBank = findViewById(R.id.spinnerDestination).asInstanceOf[Spinner]
private lazy val myApplication = getApplication.asInstanceOf[MyApplication]
private var ignoreTimeChange = false

override protected def onCreate(savedInstanceState: Bundle) = {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

timePicker.setIs24HourView(true)
initializeSpinner(spinner_sourceBank)
initializeSpinner(spinner_targetBank)
}

private def initializeSpinner(spinner: Spinner) = {
val adapter = ArrayAdapter.createFromResource(this, R.array.banks, R.layout.spinner_item)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner.setAdapter(adapter)
}

def reset(w: View) = {
timePicker.setCurrentHour(13)
timePicker.setCurrentMinute(00)
spinner_sourceBank.setSelection(0)
spinner_targetBank.setSelection(0)
}

def submit(w: View) = {
if (spinner_sourceBank.getSelectedItemPosition == 0 || spinner_targetBank.getSelectedItemPosition == 0) {
new AlertDialog.Builder(this).setPositiveButton("OK", new OnClickListener {
override def onClick(dialog: DialogInterface, which: Int) { dialog dismiss }
}).setMessage(getString(R.string.alert_title)).setTitle("Alert Dialog").setIcon(android.R.drawable.ic_dialog_alert).create.show
} else manageFragments(sourceBank, targetBank)
}

def manageFragments(sourceBank: String, targetBank: String) = {
val fragmentTransaction = getSupportFragmentManager.beginTransaction

if (targetBank == sourceBank) myApplication.setCurrentFragment(MyApplication.NOW)
else myApplication.setCurrentFragment(MyApplication.FIRST_SESSION)

fragmentTransaction.replace(R.id.fragment_container, myApplication.getCurrentFragment)
fragmentTransaction.commit
}

override def onCreateOptionsMenu(menu: Menu): Boolean = { getMenuInflater.inflate(R.menu.activity_main, menu); true }
}

我可以在移动设备上测试我的应用程序,它运行得很好。我也可以编写代码,但 eclipse 的表现就像在旧计算机上运行一样 - 切换选项卡需要花费大量时间,因此需要花费大量时间进行构建和部署。

最佳答案

将这些添加到 eclipse.ini(或编辑如果存在),因为它们更适合 Scala 开发:它们应该出现在 eclipse 条目下面,例如 -vm:

-Xverify:none
-Dosgi.requiredJavaVersion=1.6
-Xms900m
-Xmx900m
-Xss2m
-XX:PermSize=256m
-XX:MaxPermSize=256m
-XX:MaxGCPauseMillis=20
-XX:MaxHeapFreeRatio=70
-XX:+ScavengeBeforeFullGC
-XX:+UseParallelOldGC
-XX:+UnlockExperimentalVMOptions
-XX:+UseFastAccessorMethods
-XX:ReservedCodeCacheSize=128m
-XX:+TieredCompilation
-XX:+AggressiveOpts

可能不太可能,但如果您正在使用 CMS GC,请从文件中删除对它的引用。

关于Android、scala 和 eclipse = 不稳定的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14039149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com