안녕하세요. 초보 개발자 입니다. 질문을 한번 올렸었는데 해결이 되지않아서 다시 올릴게요.
원 질문은
http://www.masterqna.com/android/69154/%EB%8F%84%EC%99%80%EC%A3%BC%EC%84%B8%EC%9A%94-%E3%85%A0%E3%85%A0%EB%8C%80%EC%9A%A9%EB%9F%89-text%EB%A5%BC-runnable%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-textview%EC%97%90-write-%ED%95%98%EA%B8%B0
위 URL 입니다.
현재 쓰레드에서 Service 로 변경한 상태인데 홈에서 다시 앱을 실행시 ANR 이 발생합니다.
텍스트 양은 꽤 많습니다. 적을때는 발생하지 않는데 양이 많더라도 ANR 을 발생 안하게 하고 싶습니다.
Intent intent;
Filter filter;
PacketReceiver packetReceiver;
TextView textview;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(MainActivity.this, PacketService.class);
filter = new IntentFilter("broad");
mTcptv = (TextView) findViewById(R.id.log_tv);
packetReceiver = new PacketReceiver();
mStartBtn = (Button) findViewById(R.id.start_btn);
mStartBtn.setOnClickListener(new View.OnClickListener() {
boolean flag = false;
@Override
public void onClick(View v) {
flag = !flag;
if (flag) {
startService(intent);
registerReceiver(packetReceiver, filter);
Log.d("isServiceRunning--",String.valueOf(isServiceRunningCheck()));
} else {
stopService(intent);
}
}
});
public class PacketReceiver extends BroadcastReceiver{
public PacketReceiver() {
super();
}
@Override
public IBinder peekService(Context myContext, Intent service) {
return super.peekService(myContext, service);
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Broadcast--","reciever");
String packetStr = intent.getStringExtra("http");
mTcptv.setMovementMethod(new ScrollingMovementMethod());
mTcptv.append(packetStr+"\n");
}
}
}
위는 메인과 리시버 이고
public class PacketService extends IntentService {
DataOutputStream os;
String temp;
File dumpedFile;
public PacketService() {
super("PacketService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("service","start");
writePacket();
}
private void writePacket() {
try {
/
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
temp = new String();
Intent broadcastIntent = new Intent();
while (!Thread.interrupted()) {
// Log.d("whild", "no while");
temp = reader.readLine();
if (temp != null) {
Log.e("READER", new String(temp));
fos.write(temp.getBytes());
if (temp.matches("\r"))
fos.write("\r\n".getBytes());
broadcastIntent.setAction("broad");
broadcastIntent.putExtra("http", temp);
sendBroadcast(broadcastIntent);
}
}
} catch (Exception e) {
Log.e("Process Manager", "Unable to execute top command");
e.printStackTrace();
}
위는 서비스 입니다.
홈화면에서 다시 앱을 실행시킬시에 ANR이 안나게 하는방법이 무엇이 있을까요...