首页 > 编程知识 正文

kotlin和java开发优缺点,kotlin使用率

时间:2023-05-03 05:54:56 阅读:285546 作者:4746

#使用Kotlin和java实现内存开销对比

文章目录 @[toc]

##前言
前几天学习了一下kotlin,实现了listview,突发奇想,使用java编写一样的代码,它们的内存消耗,谁的多?带着这个问题编写了2套代码。使用kotlin实现的listview,这里就不在详述了,可以查看我的上一篇博客Kotlin学习之ListView,使用java编写的,我会放在下面作为参考。
##一、使用listview时内存消耗对比
###1.1java实现的listview
我们创建一个名为activity_main.xml,里面放一个listview控件,id为lvTodo

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activity.MainActivity"> <ListView android:id="@+id/lvTodo" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>

创建ListView的adapter

这里我们自定义一个名为ToDoListAdapter的adapter,继承BaseAdapter

package com.fm.testandroid.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.fm.testandroid.R;import java.util.ArrayList;import java.util.List;/** * @author:fangming * @date:Created on 2018/9/4 * @description: */public class ToDoListAdapter extends BaseAdapter { Context mContext; List<String> todoList=new ArrayList<>(); MyViewHolder myViewHolder; public ToDoListAdapter(List<String> todoList,Context mContext) { this.mContext = mContext; this.todoList = todoList; } @Override public int getCount() { return todoList!=null?todoList.size():0; } @Override public Object getItem(int position) { return todoList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { String item = todoList.get(position); if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.todolist_item, null); myViewHolder = new MyViewHolder(convertView); convertView.setTag(myViewHolder); } else { myViewHolder = (MyViewHolder) convertView.getTag(); } myViewHolder.mContentTv.setText(item); return convertView; } class MyViewHolder{ TextView mContentTv; MyViewHolder(View view){ this.mContentTv=view.findViewById(R.id.mContentTv); } }}

在mainactivity中设置listview的adapter

package com.fm.testandroid.activity;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import com.fm.testandroid.R;import com.fm.testandroid.adapter.ToDoListAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { List<String> dataList=new ArrayList<String>(); ToDoListAdapter mAdapter=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); } private void initData(){ ListView lvTodo=(ListView) findViewById(R.id.lvTodo); for (int i = 0; i <=10; i++) { dataList.add("hello"); } mAdapter=new ToDoListAdapter(dataList,this.getBaseContext()); lvTodo.setAdapter(mAdapter); }}

运行一下,界面如下,和kotlin写的一样。代码思想也一样。

###1.2内存消耗对比
这里我们使用android自带的Android profiler进行查看
使用java时的内存消耗

这里可以看到使用java时内存消耗大概在18.07左右

使用kotlin时的内存消耗

这里可以看到使用kotlin时,内存消耗在21.04左右

语言内存开销java18.07k飞艇如何买前5后57.app.AppCompatActivity;import android.os.Bundle;import android.widget.ListView;import com.fm.testandroid.R;import com.fm.testandroid.adapter.ToDoListAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { List<String> dataList=new ArrayList<String>(); ToDoListAdapter mAdapter=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); } private void initData(){ ListView lvTodo=(ListView) findViewById(R.id.lvTodo); for (int i = 0; i <=10; i++) { dataList.add("hello"); } mAdapter=new ToDoListAdapter(dataList,this.getBaseContext()); lvTodo.setAdapter(mAdapter); }}

运行一下,界面如下,和kotlin写的一样。代码思想也一样。

###1.2内存消耗对比
这里我们使用android自带的Android profiler进行查看
使用java时的内存消耗

这里可以看到使用java时内存消耗大概在18.07左右

使用kotlin时的内存消耗

这里可以看到使用kotlin时,内存消耗在21.04左右

语言内存开销java18.07kotlin21.04

从以上对比,可以看出kotlin在运行时,内存消耗要比java的高一点。
##二、编写helloworld进行对比
这里还有一点疑问,kotlin加了一个anko的插件包。我去掉kotlin的插件包,使用java和kotlin分别编写了一个TextView显示hello的程序,再次运行对比。这里就不展示代码了,比较简单。

语言内存开销(第一次)内存开销(第二次)内存开销(第三次)java16.5418.3618.4kotlin19.8117.8819.92

从以上对比,可以看出kotlin在运行时内存消耗和java的有时高,有时低,有时高,和手机当前的环境有关。总体相差不大。

##三、总结
通过以上的一些实验对比,kotlin运行时内存消耗和java的消耗相差不多。不得不承认kotlin确实挺优秀的。期待它的进一步发展。对于android开发者来说,用哪个都可以。java也好,kotlin也好。只要思想不变就好。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。