当前位置: 首页 > news >正文

新网站备案广告设计与制作专业分析

新网站备案,广告设计与制作专业分析,什么是营销策划,做一个简单的网站怎么做项目结构说明 res/layout目录#xff1a;存放布局相关的 XML 文件#xff0c;用于定义界面的外观#xff0c;包含activity_main.xml#xff08;主界面布局#xff09;和message_item.xml#xff08;聊天消息项布局#xff09;。 res/drawable目录#xff1a;存放一些…项目结构说明 res/layout目录存放布局相关的 XML 文件用于定义界面的外观包含activity_main.xml主界面布局和message_item.xml聊天消息项布局。 res/drawable目录存放一些自定义的图形资源相关的 XML 文件以及图片资源如果有用于界面样式设置如背景、按钮样式等包含edittext_rounded_bg.xml、button_send_bg.xml、left_message_bg.xml、right_message_bg.xml等文件代码中只是简单示意这部分并没有整理很清楚接下来打算可根据实际需求替换和完善图片资源等。 java对应项目包名的目录下存放业务逻辑代码等包含如MainActivity.java主 Activity 类处理界面交互、消息发送接收展示等核心逻辑、ChatAdapter.java聊天消息列表适配器类用于将消息数据绑定到RecyclerView的每一项上展示、Message.java消息实体类表示一条聊天消息、DBHelper.java数据库帮助类用于管理 SQLite 数据库的创建、操作等。 代码展示 布局文件代码 activity_main.xml存放在res/layout目录下 ?xml version1.0 encodingutf-8? RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#EFEFF4tools:context.MainActivity!-- 聊天消息列表RecyclerView --androidx.recyclerview.widget.RecyclerViewandroid:idid/recyclerView_chatandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:layout_aboveid/layout_chat_inputandroid:clipToPaddingfalseandroid:padding8dpandroid:scrollbarsvertical /!-- 输入框及发送按钮所在的底部布局 --LinearLayoutandroid:idid/layout_chat_inputandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_alignParentBottomtrueandroid:backgroundandroid:color/whiteandroid:orientationhorizontalandroid:padding8dp!-- 表情按钮这里先简单占位可后续添加点击事件及表情选择功能等 --ImageButtonandroid:idid/button_emojiandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:srcdrawable/ic_emojiandroid:contentDescription表情 /!-- 输入文本的EditText设置了一些样式属性 --EditTextandroid:idid/editText_messageandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:backgrounddrawable/edittext_rounded_bgandroid:hint输入消息android:padding8dpandroid:textColor#000android:textColorHint#999 /!-- 发送按钮 --Buttonandroid:idid/button_sendandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text发送android:textColorandroid:color/whiteandroid:backgrounddrawable/button_send_bg //LinearLayout/RelativeLayoutmessage_item.xml存放在res/layout目录下 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalandroid:padding4dp!-- 显示发送者头像这里先简单用一个ImageView占位实际可根据用户信息加载对应的头像资源 --ImageViewandroid:idid/imageView_sender_avatarandroid:layout_width40dpandroid:layout_height40dpandroid:srcdrawable/default_avatarandroid:scaleTypecenterCrop /!-- 用于包裹消息内容的布局根据消息是自己发送还是别人发送设置不同的对齐方式 --LinearLayoutandroid:idid/layout_message_contentandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:orientationverticalandroid:padding8dp!-- 显示发送者昵称实际中可根据用户信息动态设置 --TextViewandroid:idid/textView_sender_nameandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text发送者昵称android:textColor#000android:textSize14sp /!-- 根据消息类型展示不同内容这里先以文本消息为例用TextView展示 --TextViewandroid:idid/textView_message_contentandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text消息内容android:textColor#333android:textSize16spandroid:layout_marginTop4dp //LinearLayout/LinearLayoutres/drawable目录下样式资源相关 XML 文件代码 edittext_rounded_bg.xml存放在res/drawable目录下 ?xml version1.0 encodingutf-8? shape xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:shaperectanglesolid android:colorandroid:color/white /corners android:radius16dp //shapebutton_send_bg.xml存放在res/drawable目录下 ?xml version1.0 encodingutf-8? selector xmlns:androidhttp://schemas.android.com/apk/res/androiditem android:state_pressedtrueshape android:shaperectanglesolid android:color#007AFF /corners android:radius16dp //shape/itemitemshape android:shaperectanglesolid android:color#0085FF /corners android:radius16dp //shape/item/selectorleft_message_bg.xml存放在res/drawable目录下 ?xml version1.0 encodingutf-8? shape xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:shaperectanglesolid android:color#DCF8C6 /corners android:topLeftRadius16dpandroid:bottomLeftRadius16dpandroid:bottomRightRadius16dp //shaperight_message_bg.xml存放在res/drawable目录下样式与left_message_bg.xml类似可做区分这里简单示意 ?xml version1.0 encodingutf-8? shape xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:shaperectanglesolid android:color#87CEEB /corners android:topRightRadius16dpandroid:bottomLeftRadius16dpandroid:bottomRightRadius16dp //shape业务逻辑代码 import java.util.Date;public class Message {private String sender;private String content;private String messageType;private long timestamp; // 添加时间戳属性记录消息发送时间public Message(String sender, String content, String messageType) {this(sender, content, messageType, new Date().getTime()); // 默认使用当前时间作为时间戳}public Message(String sender, String content, String messageType, long timestamp) {this.sender sender;this.content content;this.messageType messageType;this.timestamp timestamp;}public String getSender() {return sender;}public String getContent() {return content;}public String getMessageType() {return messageType;}public long getTimestamp() {return timestamp;} }ChatAdapter.java存放在 java 对应包名目录下 import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView;import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList; import java.util.List;public class ChatAdapter extends RecyclerView.AdapterChatAdapter.ChatViewHolder {private ListMessage messageList;public ChatAdapter() {messageList new ArrayList();}public void addMessage(Message message) {messageList.add(message);notifyItemInserted(messageList.size() - 1);}NonNullOverridepublic ChatViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {// 使用新的消息项布局文件来加载视图View view LayoutInflater.from(parent.getContext()).inflate(R.layout.message_item, parent, false);return new ChatViewHolder(view);}Overridepublic void onBindViewHolder(NonNull ChatViewHolder holder, int position) {Message message messageList.get(position);holder.bind(message);}Overridepublic int getItemCount() {return messageList.size();}class ChatViewHolder extends RecyclerView.ViewHolder {private ImageView imageViewSenderAvatar;private TextView textViewSenderName;private TextView textViewMessageContent;public ChatViewHolder(NonNull View itemView) {super(itemView);imageViewSenderAvatar itemView.findViewById(R.id.imageView_sender_avatar);textViewSenderName itemView.findViewById(R.id.textView_sender_name);textViewMessageContent itemView.findViewById(R.id.textView_message_content);}public void bind(Message message) {if (text.equals(message.getMessageType())) {// 根据消息发送者等信息设置对应的显示内容和样式这里简单示例可根据实际完善textViewSenderName.setText(message.getSender());textViewMessageContent.setText(message.getContent());if (message.getSender().equals(自己的用户名)) {// 假设自己发送的消息居右对齐等样式设置这里只是简单示意可通过布局属性等详细设置样式// 比如设置背景颜色、文本对齐方式等与对方消息区分开textViewMessageContent.setBackgroundResource(R.drawable.right_message_bg);} else {textViewMessageContent.setBackgroundResource(R.drawable.left_message_bg);}}// 后续添加对图片消息等其他类型消息的展示逻辑}} }DBHelper.java存放在 java 对应包名目录下 import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper;public class DBHelper extends SQLiteOpenHelper {// 数据库名称private static final String DATABASE_NAME chat.db;// 数据库版本号每次数据库结构变更时需要递增这个版本号private static final int DATABASE_VERSION 1;// 聊天记录表名称public static final String TABLE_CHAT chat_messages;// 聊天记录各字段名称及类型定义public static final String COLUMN_ID _id;public static final String COLUMN_SENDER sender;public static final String COLUMN_CONTENT content;public static final String COLUMN_MESSAGE_TYPE message_type;public static final String COLUMN_TIMESTAMP timestamp;public DBHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}Overridepublic void onCreate(SQLiteDatabase db) {// 创建聊天记录表的SQL语句String createTableSql CREATE TABLE TABLE_CHAT ( COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT, COLUMN_SENDER TEXT, COLUMN_CONTENT TEXT, COLUMN_MESSAGE_TYPE TEXT, COLUMN_TIMESTAMP INTEGER );db.execSQL(createTableSql);}Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// 这里简单示例如果版本升级先删除旧表再创建新表实际应用中可能需要更复杂的迁移逻辑db.execSQL(DROP TABLE IF EXISTS TABLE_CHAT);onCreate(db);} }MainActivity.java存放在 java 对应包名目录下 import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView;import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener;import java.util.ArrayList; import java.util.List;public class MainActivity extends AppCompatActivity {private RecyclerView recyclerViewChat;private EditText editTextMessage;private Button buttonSend;private ChatAdapter chatAdapter;private DatabaseReference databaseReference;private ValueEventListener valueEventListener;private DBHelper dbHelper;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerViewChat findViewById(R.id.recyclerView_chat);editTextMessage findViewById(R.id.editText_message);buttonSend findViewById(R.id.button_send);// 初始化数据库帮助类dbHelper new DBHelper(this);// 设置RecyclerView的布局管理器LinearLayoutManager layoutManager new LinearLayoutManager(this);layoutManager.setStackFromEnd(true); // 让新消息显示在底部recyclerViewChat.setLayoutManager(layoutManager);chatAdapter new ChatAdapter();recyclerViewChat.setAdapter(chatAdapter);// 初始化Firebase数据库引用databaseReference FirebaseDatabase.getInstance().getReference(messages);// 监听数据库消息变化实时更新聊天界面这里可以结合本地数据库做优化比如先展示本地已有的再实时更新增量部分等valueEventListener new ValueEventListener() {Overridepublic void onDataChange(NonNull DataSnapshot dataSnapshot) {ListMessage messages new ArrayList();for (DataSnapshot snapshot : dataSnapshot.getChildren()) {Message message snapshot.getValue(Message.class);messages.add(message);}chatAdapter new ChatAdapter();for (Message msg : messages) {chatAdapter.addMessage(msg);}recyclerViewChat.setAdapter(chatAdapter);}Overridepublic void onCancelled(NonNull DatabaseError databaseError) {Toast.makeText(MainActivity.this, 读取消息失败, Toast.LENGTH_SHORT).show();}};databaseReference.addValueEventListener(valueEventListener);// 从本地数据库读取历史聊天记录并展示loadChatHistoryFromDB();buttonSend.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {String messageText editTextMessage.getText().toString().trim();if (!messageText.isEmpty()) {// 这里简单假设当前用户名为固定的实际要做登录获取等逻辑String sender user1;Message message new Message(sender, messageText, text);// 将消息保存到Firebase数据库网络存储用于实时同步等databaseReference.push().setValue(message);// 同时将消息插入到本地SQLite数据库insertMessageToDB(message);editTextMessage.setText();}}});}// 从本地数据库加载聊天历史记录的方法private void loadChatHistoryFromDB() {ListMessage historyMessages new ArrayList();SQLiteDatabase db dbHelper.getReadableDatabase();String[] columns软件架构介绍 #mermaid-svg-qM1jsM7ryLHuBHSC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC .error-icon{fill:#552222;}#mermaid-svg-qM1jsM7ryLHuBHSC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-qM1jsM7ryLHuBHSC .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-qM1jsM7ryLHuBHSC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-qM1jsM7ryLHuBHSC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-qM1jsM7ryLHuBHSC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-qM1jsM7ryLHuBHSC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-qM1jsM7ryLHuBHSC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-qM1jsM7ryLHuBHSC .marker.cross{stroke:#333333;}#mermaid-svg-qM1jsM7ryLHuBHSC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-qM1jsM7ryLHuBHSC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC .cluster-label text{fill:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC .cluster-label span{color:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC .label text,#mermaid-svg-qM1jsM7ryLHuBHSC span{fill:#333;color:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC .node rect,#mermaid-svg-qM1jsM7ryLHuBHSC .node circle,#mermaid-svg-qM1jsM7ryLHuBHSC .node ellipse,#mermaid-svg-qM1jsM7ryLHuBHSC .node polygon,#mermaid-svg-qM1jsM7ryLHuBHSC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-qM1jsM7ryLHuBHSC .node .label{text-align:center;}#mermaid-svg-qM1jsM7ryLHuBHSC .node.clickable{cursor:pointer;}#mermaid-svg-qM1jsM7ryLHuBHSC .arrowheadPath{fill:#333333;}#mermaid-svg-qM1jsM7ryLHuBHSC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-qM1jsM7ryLHuBHSC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-qM1jsM7ryLHuBHSC .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-qM1jsM7ryLHuBHSC .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-qM1jsM7ryLHuBHSC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-qM1jsM7ryLHuBHSC .cluster text{fill:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC .cluster span{color:#333;}#mermaid-svg-qM1jsM7ryLHuBHSC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-qM1jsM7ryLHuBHSC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据绑定与展示 获取消息数据 消息数据处理与传递 网络存储与同步 数据库操作 网络通信 表现层 - MainActivity ChatAdapter 业务逻辑层 - Message 数据访问层 - DBHelper 数据访问层 - Firebase相关操作 SQLite数据库 Firebase数据库 表现层Presentation Layer 主要由MainActivity和相关的布局文件activity_main.xml、message_item.xml等构成。MainActivity负责处理用户界面的交互逻辑例如用户输入消息后点击发送按钮的事件响应、接收消息并展示在RecyclerView列表中等操作。布局文件则定义了聊天界面的外观包括聊天消息展示区域、输入框、发送按钮等各部分的视觉呈现。 借助ChatAdapter来将消息数据适配并绑定到RecyclerView的每一项上实现聊天消息列表的展示它也是表现层与数据层进行交互的一个中间桥梁负责把从数据层获取到的数据以合适的形式展示在界面上。 业务逻辑层Business Logic Layer 消息实体类Message属于此层它定义了聊天消息的结构包含发送者、消息内容、消息类型以及时间戳等属性用于在整个应用中对消息进行统一的抽象表示方便各层之间传递和处理消息相关的数据。 虽然示例中没有非常复杂的业务逻辑但像判断消息类型文本或图片等来进行不同展示逻辑处理、处理聊天记录的一些简单排序或者筛选等功能都可以在这一层进行扩展和实现目前简单地体现在ChatAdapter的bind方法中对文本消息根据发送者不同设置不同展示样式等逻辑上。 数据访问层Data Access Layer 包含DBHelper类用于管理本地 SQLite 数据库的创建、打开、升级以及数据的增删改查操作。它封装了与数据库直接交互的细节例如创建聊天记录表的 SQL 语句执行、消息数据插入到数据库insertMessageToDB方法以及从数据库查询加载聊天历史记录loadChatHistoryFromDB方法等操作为业务逻辑层提供了统一的数据存储和读取接口。 另外还有与 Firebase 相关的部分DatabaseReference以及相关的数据库监听逻辑用于实现网络存储和实时同步聊天记录的功能通过将消息数据推送到 Firebase 数据库以及监听数据库变化来实时更新界面展示的消息内容实现多人之间聊天记录的同步。 技术亮点及其实现原理 类似微信聊天界面的布局展示 亮点打造了一个视觉效果和交互体验较为接近微信聊天界面的布局能够清晰区分不同用户发送的消息并且包含了常见的输入框、发送按钮以及表情按钮预留功能位等元素整体界面简洁美观且符合用户使用习惯。 实现原理 布局嵌套与组件使用在主布局文件activity_main.xml中采用RelativeLayout作为根布局方便对各子布局进行相对位置的定位。内部嵌套RecyclerView用于展示聊天消息列表通过设置其布局属性使其占满除底部输入框区域之外的空间并允许垂直滚动来显示多条消息。底部的输入框区域则使用LinearLayout进行水平排列依次放置表情按钮ImageButton、文本输入框EditText和发送按钮Button各组件设置合适的宽度、高度、背景、文本样式等属性来达到美观的效果。 消息项布局定制对于聊天消息列表中的每一项message_item.xml使用LinearLayout来整体布局左边放置显示发送者头像的ImageView右边再嵌套一个LinearLayout来放置发送者昵称TextView和消息内容TextView。通过代码逻辑根据消息发送者判断来为消息内容的TextView设置不同的背景样式如自己发送的居右对齐、背景颜色不同对方发送的居左对齐、对应背景颜色等以此区分不同用户的消息营造类似微信聊天界面的视觉感受。 样式资源引用在res/drawable目录下定义了多个 XML 样式资源文件如用于设置EditText圆角背景的edittext_rounded_bg.xml、发送按钮不同状态下背景样式的button_send_bg.xml以及区分左右消息背景的left_message_bg.xml和right_message_bg.xml等通过在布局文件中引用这些样式资源进一步增强了界面的美观性和专业性。 支持多人聊天及实时消息同步 亮点实现了多人之间进行文本聊天图片聊天可后续进一步完善扩展并且聊天记录能够实时同步所有参与聊天的用户可以及时看到新发送的消息提升了聊天的交互性和即时性。 实现原理 Firebase 实时数据库的使用利用 Firebase 提供的实时数据库服务在应用中初始化DatabaseReference来指向存储聊天消息的数据库节点示例中为messages节点。当用户点击发送按钮发送一条消息时在MainActivity中处理发送按钮点击事件将构造好的Message对象包含发送者、消息内容、消息类型等信息通过push().setValue(message)方法推送到 Firebase 数据库中Firebase 会自动为每条消息生成一个唯一的键值并按照设定的结构存储消息数据。 数据库监听机制通过添加ValueEventListener对 Firebase 数据库指定节点进行监听在onDataChange回调方法中一旦数据库中的消息数据发生变化有新消息插入或者已有消息修改等情况就会获取到最新的消息数据快照DataSnapshot然后解析这些数据创建对应的Message对象列表并更新到ChatAdapter中从而实现RecyclerView展示的聊天消息列表实时更新让所有连接到该数据库的用户都能看到最新的聊天内容。 本地数据库存储聊天记录 亮点除了使用网络数据库Firebase 实时数据库进行实时同步外还借助本地的 SQLite 数据库来存储聊天记录既保障了在网络不佳等情况下聊天记录的本地保存又便于后续查询历史聊天内容、实现离线查看等功能提升了数据的可靠性和用户体验。 实现原理 数据库创建与表结构定义创建DBHelper类继承自SQLiteOpenHelper在其onCreate方法中执行创建聊天记录表名为chat_messages的 SQL 语句定义了包含消息唯一标识_id、发送者sender、消息内容content、消息类型message_type以及时间戳timestamp等字段的表结构用于存储聊天消息的详细信息。 数据插入操作当用户发送消息时在将消息推送到 Firebase 数据库的同时会调用insertMessageToDB方法该方法获取到可写的 SQLite 数据库实例通过dbHelper.getWritableDatabase()然后使用ContentValues来封装要插入的消息数据再通过db.insert方法将消息数据插入到对应的聊天记录表中实现本地数据库的消息存储。 历史记录查询与加载在MainActivity的loadChatHistoryFromDB方法中首先获取可读的 SQLite 数据库实例然后通过指定查询的列、排序方式等条件使用db.query方法从聊天记录表中查询出历史聊天记录数据将获取到的数据游标Cursor进行解析创建Message对象并添加到消息列表中最后更新到ChatAdapter来展示在聊天界面上实现了聊天历史记录的加载展示功能。 性能优化与资源管理相关亮点 亮点注重了一些基本的性能优化和资源管理措施保障聊天界面滑动流畅不卡顿并且避免了因不当的资源使用如数据库监听未及时移除等导致的内存泄露问题提升了应用的稳定性和性能表现。 实现原理 RecyclerView 优化在ChatAdapter的onBindViewHolder方法中尽量保持简洁高效的操作逻辑避免复杂耗时的计算或频繁创建新的视图对象等浪费资源的行为。例如对于图片消息展示虽然示例中未完整实现但后续可以采用异步加载图片库如 Glide 等结合合适的缓存策略内存缓存和磁盘缓存来高效加载图片减少因图片加载导致的卡顿。同时利用RecyclerView本身的复用ViewHolder机制正确实现onCreateViewHolder和onBindViewHolder方法确保视图的高效复用提升列表滚动时的性能表现。 资源释放与管理在MainActivity的onDestroy方法中添加了对 Firebase 数据库监听的移除操作通过databaseReference.removeEventListener(valueEventListener)当 Activity 销毁时比如用户退出聊天界面或者切换到其他应用等情况及时移除数据库监听避免因持续监听数据库变化导致的内存泄露以及不必要的网络资源占用等问题。对于本地 SQLite 数据库操作在每次数据库插入或查询等操作完成后及时关闭数据库连接如在insertMessageToDB方法结尾处db.close()防止数据库连接资源的浪费和潜在的资源泄露风险。 自我总结 我是主攻C方向的所以在这进两个月的时间里我花了大半个月来学习JAVA、Android 开发和数据库等相关主要知识包括RecyclerView 使用以及界面布局等知识也学习了计算机四大件的基础知识。加之学校在大二上学期的学业问题过量的知识整合对于我来说仍是一个巨大的挑战我最终的代码调试程序架构设计以及界面布局仍有很多不足各个模块之间的耦合也没有很好完成项目可以说是一塌糊涂接下来我会继续优化我的项目知道它是一个完美的APP也不必正在这里阐述自己的总结。 文章链接 在这里向老师表达我最真切的感谢首先让我来学习到了如此多的只是也令我深刻反省了自己在计算机领域的不足单鞋老师
http://www.hkea.cn/news/14272885/

相关文章:

  • 想自己做个网站中国建设部网站失信名单
  • 小程序 网站建设 app 开发建设工程培训
  • 网站页面打开速度企业信息查询系统官网北京
  • 长沙网站设计公司广东新闻频道直播在线观看高清
  • 包年seo和整站优化华为品牌策划方案
  • 做营销网站设计宁波网站推广方式
  • 网站如何运营维护ytwzjs烟台网站建设
  • 湖北企业建站系统信息衡水企业网站设计
  • 网站开发计划书封面设计做网站北京公司
  • 怎么做盗版视频网站业务推广网站
  • 自己做的网站如何上线外贸网站logo
  • 沈阳网站制作联系方式百度怎么制作网页
  • 做微商网站需要哪些宁波环网建设
  • 海珠建网站公网站开发昆山
  • 南京手机网站开发响应式做的好的网站
  • 徐州网站建设新闻汽车网站更新怎么做
  • 学校网站平台建设方案芭乐站长统计 网站统计
  • 学校建设网站前的市场分析能源网站建设方案
  • 罗湖医院网站建设福田网站设计哪家好
  • 雄县哪做网站可信网站认证有用吗
  • 江苏建设监理协会网站wordpress安装大淘客
  • 麻章手机网站建设公司购买的域名是永久的吗
  • 建设银行官网首页网站公告影视自助建站官网
  • 医院网站建设案例主流的net快速开发框架
  • 济南网站建设公司排名app 网站 比较
  • 整套网站建设视频教程wordpress公众号获取注册码
  • 长春站建筑风格西安网吧
  • 电子商务网站的类型广告牌制作安装公司
  • 杭州企业网站定制个人开公司需要什么条件
  • 新手怎么做自己网站广告浏览器大全下载