gpt4 book ai didi

java - 为什么我的 Activity 自动重新启动?

转载 作者:行者123 更新时间:2023-12-01 07:58:05 25 4
gpt4 key购买 nike

我是 Android 应用程序开发的初学者。最近开始开发一款聊天软件。我实现了客户端服务器消息交换的基本功能。我遇到了 android Activity 自动重新启动的问题。因此,创建了一个新的 View 实例,并且我无法在 ListView 上看到消息。

从跟踪中,我可以看到 Activity 已停止并自动创建。因此,再次创建 MAIN Activity 的新实例。

12-21 14:47:50.744    1913-1913/? I/System.out﹕ **********MainActivity.onCreate()-->com.chat.client.MainActivity@1e611def
12-21 14:48:11.209 1913-1913/chat.com.android_client I/System.out﹕ ********onStop() app is killed!!!
12-21 14:48:11.216 1913-1913/chat.com.android_client I/System.out﹕ **********MainActivity.onCreate()-->com.chat.client.MainActivity@7ea43db

[MainActivity.java]

package com.chat.client;

import android.app.Activity;
import android.database.DataSetObserver;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import com.chat.client.config.ChatProtocolConstants;
import com.chat.client.config.ServerUriConstants;
import com.chat.client.connect.ChatServerListener;
import com.chat.client.connect.ChatWebSocketHandler;
import com.chat.client.connect.ConnectionManager;

import chat.com.android_client.R;
import de.tavendo.autobahn.WebSocketHandler;


public class MainActivity extends Activity {

private ChatArrayAdapter chatArrayAdapter;
private ListView listView;
private EditText chatEditText;
private Button buttonSend;

private boolean side = false;

private ConnectionManager connectionManager;
private final String from = "Ramu", to = "Omkar";


@Override
protected void onCreate(Bundle savedInstanceState) {
System.out.println("**********MainActivity.onCreate()-->"+this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


buttonSend = (Button) findViewById(R.id.buttonSend);

listView = (ListView) findViewById(R.id.listView1);


chatArrayAdapter = new ChatArrayAdapter(getApplicationContext(), R.layout.activity_chat_singlemessage);

chatEditText = (EditText) findViewById(R.id.chatText);

chatEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
ChatMessage chatMessage = new ChatMessage(false, chatEditText.getText().toString());
return sendChatMessage(chatMessage);
}
return false;
}

});

buttonSend.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
ChatMessage chatMessage = new ChatMessage(false, chatEditText.getText().toString());
sendChatMessage(chatMessage);
}
});

listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
listView.setAdapter(chatArrayAdapter);

chatArrayAdapter.registerDataSetObserver(new DataSetObserver() {
@Override
public void onChanged() {
super.onChanged();
listView.setSelection(chatArrayAdapter.getCount() - 1);
}
});

// Connect to chat server
connectToServer();

}

@Override
protected void onStop() {
super.onStop();

System.out.println("********onStop() app is killed!!!");
}

private boolean sendChatMessage(ChatMessage chatMessage) {
connectionManager.sendMessage(from + ChatProtocolConstants.DELIMITER + to + ChatProtocolConstants.DELIMITER + chatMessage.message);
return updateChatList(chatMessage);
}

private boolean updateChatList(ChatMessage chatMessage) {
chatArrayAdapter.add(chatMessage);
chatEditText.setText("");

return true;
}


private void connectToServer() {

connectionManager = ConnectionManager.getInstance();
WebSocketHandler chatWebSocketHandler = new ChatWebSocketHandler(from);

((ChatWebSocketHandler) chatWebSocketHandler).setWebSocketListener(new ChatServerListener() {
@Override
public void messageReceived(String message) {
ChatMessage chatMessage = new ChatMessage(true, message);
System.out.println("Received message from web socket handler: " + message);
updateChatList(chatMessage);
}
}
);
connectionManager.connect(ServerUriConstants.serverUri + ServerUriConstants.connectEndPoint, chatWebSocketHandler);

}
}

[activity_main.xml]

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="80dp"></ListView>

<RelativeLayout
android:id="@+id/form"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:orientation="vertical">

<EditText
android:id="@+id/chatText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_toLeftOf="@+id/buttonSend"
android:ems="10"
android:inputType="textMultiLine" />

<Button
android:id="@+id/buttonSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/chatText"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="@string/button_send" />

</RelativeLayout>

我评论了对 connectToServer() 的调用来检查行为,但它是相同的。所以不存在 connectToServer() 引起的问题。

以下是我在 android studio 中使用的模拟器来运行这个应用程序 由于 Activity 不会自动重新启动,因此这里可能会缺少什么。请提出建议。

最佳答案

在许多情况下, Activity 都会自动重新启动,包括旋转、屏幕尺寸更改、区域设置更改等。您可以在 list 中覆盖此行为。

这是一种蹩脚的做事方式,但我们坚持这样做。

关于java - 为什么我的 Activity 自动重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27588317/

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