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

前端之家收集整理的这篇文章主要介绍了Android,scala和eclipse =不稳定的混合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近,我在scala中编写了一些Android应用程序,使用Eclipse.
一切都很好,直到我的程序只有几个类/活动.
当我添加更多代码时,JVM开始崩溃,eclipse经常冻结,adb经常丢失连接.任务经理表明Java进程需要800到1300 MB的内存!

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

此外,我的软件是最新版本,包含最新版本的Eclipse,Android SDK,Scala和Java开发工具包,以及eclipse的所有插件. -vmargs配置为scala开发,但它根本没有帮助.
所以我把它作为问题的原因消除了.

当我将我的代码重写为Java时,everythig非常出色,我可以继续我的项目.

有没有人发现在Android项目中使用scala的解决方案?我在这里和谷歌小组上阅读了几个类似的主题但这个问题没有答案.

编辑:

我用visual vm描述了我的代码,但堆空间使用是正常的.
这是我的代码的一些片段.

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,请从文件删除对它的引用.

原文链接:https://www.f2er.com/android/430758.html

猜你在找的Android相关文章