2013-03-20 1 views
2

내 제목이 내 안드로이드가 추락 할 때 설명하기에 충분하지 않다고 생각합니다. 내 응용 프로그램에 3 개의 탭 위젯이 있습니다. 이는 각각의 탭 위젯에 3 가지 액티비티 (accountMainThread.java, TodayExpenseList.java 및 settingThread)가 적용되었음을 의미합니다. 여기에 내 탭 활동 코드가 있습니다.다른 탭을 터치 할 때 Android 충돌이 2 번 발생합니다

TabSpec mainSpec = addNewTab(tab1,android.R.drawable.ic_menu_upload);   
    Intent mainIntent = new Intent(AccountTabActivity.this,accountMainThread.class); 
    mainSpec.setContent(mainIntent);    
    tabHost.addTab(mainSpec);   

    TabSpec todayExpenseListSpec = addNewTab(tab2,android.R.drawable.ic_menu_today);     
    Intent todayExpenseListIntent = new Intent(AccountTabActivity.this,TodayExpenseList.class);   
    todayExpenseListSpec.setContent(todayExpenseListIntent); 
    tabHost.addTab(todayExpenseListSpec);  

    TabSpec settingSpec = addNewTab(tab3,android.R.drawable.ic_menu_manage); 
    Intent settingIntent = new Intent(AccountTabActivity.this,settingThread.class); 
    settingSpec.setContent(settingIntent); 
    tabHost.addTab(settingSpec); 

내 작품의 유일한 부분. 글쎄, 내 응용 프로그램은 첫 번째 탭 (accountMainThread)에서 시작되며 응용 프로그램이 잘 작동합니다. 그런 다음 두 번째 탭 (오늘 비용 목록)을 탭하고 여전히 동일합니다. 그런 다음 세 번째 탭 (settingThread) 탭을 클릭하고 여전히 동일합니다. 문제는 내가 다음 탭 탭 또는 두 번째 탭 또는 세 번째 탭에서 탭을 탭하면 내 응용 프로그램이 충돌하는 것입니다. 내 설명이 충분히 이해되기를 바랍니다.

여기 여기 내 전체 tabActivity 코드

public class AccountTabActivity extends TabActivity { 

private String[] idItem; 
private static connectionDatabase dbConnect; 
private static SQLLiteAdapter mDbHelper; 
private static int totalTodayExpense = 0; 
private static String tab1 = "Send Expense"; 
private static String tab2 = "Today Expense"; 
private static String tab3 = "Setting"; 
private static TabHost tabHost; 
private static int dataProcessed = 0; 
private static RelativeLayout startupLayout; 
private static ProgressBar startupProgress; 
private static TextView startupText; 
private int progressValues[] = {0,50,70,90,98,100}; 
private String startupSequences[] = { 
     "Initializing", 
     "Connecting database", 
     "Initializing array list", 
     "Retrieving data", 
     "Synchronizing data with server", 
     "Setting up UI thread" 
}; 



@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    //----------------------------------------------- 

    setContentView(R.layout.android_tab_activity); 
    startupLayout = (RelativeLayout)findViewById(R.id.startup_layout); 
    startupProgress = (ProgressBar)findViewById(R.id.startup_progressbar); 
    startupText = (TextView)findViewById(R.id.startup_textview);   
    tabHost = getTabHost(); /* 
    tabHost.setOnTabChangedListener(new OnTabChangeListener(){ 

     @Override 
     public void onTabChanged(String tabId) { 
      //setTabColor(tabHost); 

     } 

    }); 
    */ 

    new readyTabActivity().execute(); 
    dataProcessed = 1; 
} 

public void setTabColor(TabHost tabhost){ 

    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++){ 
     tabhost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.not_select); 
    } 

    tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()) 
     .setBackgroundResource(R.drawable.selected); 
} 

private class readyTabActivity extends AsyncTask<String,Integer,Void>{ 

    private int connectedFlag = 0; 
    private JSONArray jsonArray; 
    private int dataHavenSyncYet = 0; 
    private SQLLiteAdapter mDbHelper; 

    @Override 
    protected void onPreExecute(){ 
     startupProgress.setProgress(progressValues[0]); 
    } 

    protected Void doInBackground(String... url){ 

     try{ 
      dbConnect = new connectionDatabase(); 

      mDbHelper = new SQLLiteAdapter(AccountTabActivity.this); 
      mDbHelper.open(); 
      publishProgress(1); 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      publishProgress(1); 
      JSONObject jsonObject = dbConnect.HttpRequest(dbConnect.url_readData, "get",params); 
      publishProgress(2); 

      if(jsonObject.getBoolean("list")){ 
       connectedFlag = 1;  
       jsonArray = (JSONArray)jsonObject.get("list"); 
      }else{ 
       connectedFlag = 0; 
      } 

      publishProgress(3); 


     }catch(Exception e){ 
      connectedFlag = 0;    
      Log.e("Icreate", "error on database : " + e.toString()); 
     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 

     startupLayout.setVisibility(View.GONE); 

     //////////////////////////////////////////////////////////////// 
     // main Thread 

     TabSpec mainSpec = addNewTab(tab1,android.R.drawable.ic_menu_upload);   
     Intent mainIntent = new Intent(AccountTabActivity.this,accountMainThread.class); 
     mainSpec.setContent(mainIntent); 
     mainIntent.putExtra("CONNECT", connectedFlag); 
     tabHost.addTab(mainSpec);   

     TabSpec todayExpenseListSpec = addNewTab(tab2,android.R.drawable.ic_menu_today);    


     Intent todayExpenseListIntent = new Intent(AccountTabActivity.this,TodayExpenseList.class);   
     todayExpenseListSpec.setContent(todayExpenseListIntent); 
      todayExpenseListIntent.putExtra("CONNECT", connectedFlag);   
     tabHost.addTab(todayExpenseListSpec);  


     //////////////////////////////////////////////////////////////// 
     // setting Thread 

     TabSpec settingSpec = addNewTab(tab3,android.R.drawable.ic_menu_manage); 
     Intent settingIntent = new Intent(AccountTabActivity.this,settingThread.class); 
     ArrayList<Map<String,String>> arraySTList = 
       (ArrayList<Map<String,String>>)buildSettingThreadData(); 
     settingIntent.putExtra("CONNECT", connectedFlag); 
     settingIntent.putExtra("array_st_list", arraySTList); 

     settingSpec.setContent(settingIntent); 
     tabHost.addTab(settingSpec); 

     ///////////////////////////////////////////////////// 
     // add tab to tabHost  

    }  

    @Override 
    protected void onProgressUpdate(Integer... values){ 
     startupProgress.setProgress(progressValues[values[0]]); 
     startupText.setText(""+startupSequences[values[0]]); 

    } 

    private TabSpec addNewTab(String title, int drawable){ 
     TabHost.TabSpec mainSpec = tabHost.newTabSpec(title); 
     View tabIndicator = LayoutInflater.from(AccountTabActivity.this).inflate(R.layout.tab_indicator,getTabWidget(),false); 
     TextView title_text = (TextView)tabIndicator.findViewById(R.id.title); 
     title_text.setText(title); 
     ImageView icon = (ImageView)tabIndicator.findViewById(R.id.icon); 
     icon.setImageResource(drawable); 
     mainSpec.setIndicator(tabIndicator); 

     return mainSpec; 
    } 

    private ArrayList<Map<String, String>> buildSettingThreadData(){ 
     ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
     list.add(putSTData("Database State",dbConnect.connectionState)); 
     list.add(putSTData("URL Retrieve Data",dbConnect.url_readData)); 
     list.add(putSTData("URL Insert Data",dbConnect.url_insertData)); 
     list.add(putSTData("URL Delete Data",dbConnect.url_deleteData)); 
     list.add(putSTData("Creator","Lik Wee")); 
     return list; 
    } 

    private HashMap<String, String> putSTData(String title, String content) { 
     HashMap<String, String> item = new HashMap<String, String>(); 
     item.put("title", title); 
     item.put("content", content);   
     return item; 
    }   
} 



} 

의 내가 어떤 explaination 및 코드의 경우를 제공 할 것입니다

03-20 13:08:16.742: E/ActivityThread(661): Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]efa88 that was originally bound here 
03-20 13:08:16.742: E/ActivityThread(661): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]efa88 that was originally bound here 
03-20 13:08:16.742: E/ActivityThread(661): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969) 
03-20 13:08:16.742: E/ActivityThread(661): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 
03-20 13:08:16.742: E/ActivityThread(661): at android.app.ContextImpl.bindService(ContextImpl.java:1418) 
03-20 13:08:16.742: E/ActivityThread(661): at android.app.ContextImpl.bindService(ContextImpl.java:1407) 
03-20 13:08:16.742: E/ActivityThread(661): at android.content.ContextWrapper.bindService(ContextWrapper.java:473) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 
03-20 13:08:16.742: E/ActivityThread(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 
03-20 13:08:16.742: E/ActivityThread(661): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-20 13:08:16.742: E/ActivityThread(661): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-20 13:08:16.742: E/ActivityThread(661): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-20 13:08:16.742: E/ActivityThread(661): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-20 13:08:16.742: E/ActivityThread(661): at java.lang.Thread.run(Thread.java:856) 
03-20 13:08:16.753: E/StrictMode(661): null 
03-20 13:08:16.753: E/StrictMode(661): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]efa88 that was originally bound here 
03-20 13:08:16.753: E/StrictMode(661): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969) 
03-20 13:08:16.753: E/StrictMode(661): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 
03-20 13:08:16.753: E/StrictMode(661): at android.app.ContextImpl.bindService(ContextImpl.java:1418) 
03-20 13:08:16.753: E/StrictMode(661): at android.app.ContextImpl.bindService(ContextImpl.java:1407) 
03-20 13:08:16.753: E/StrictMode(661): at android.content.ContextWrapper.bindService(ContextWrapper.java:473) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.emailcommon.service.AccountServiceProxy.getDeviceId(AccountServiceProxy.java:116) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.exchange.ExchangeService.getDeviceId(ExchangeService.java:1249) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1856) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 
03-20 13:08:16.753: E/StrictMode(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 
03-20 13:08:16.753: E/StrictMode(661): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-20 13:08:16.753: E/StrictMode(661): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-20 13:08:16.753: E/StrictMode(661): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-20 13:08:16.753: E/StrictMode(661): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-20 13:08:16.753: E/StrictMode(661): at java.lang.Thread.run(Thread.java:856) 
03-20 13:08:16.762: E/ActivityThread(661): Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]2af40 that was originally bound here 
03-20 13:08:16.762: E/ActivityThread(661): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]2af40 that was originally bound here 
03-20 13:08:16.762: E/ActivityThread(661): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969) 
03-20 13:08:16.762: E/ActivityThread(661): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 
03-20 13:08:16.762: E/ActivityThread(661): at android.app.ContextImpl.bindService(ContextImpl.java:1418) 
03-20 13:08:16.762: E/ActivityThread(661): at android.app.ContextImpl.bindService(ContextImpl.java:1407) 
03-20 13:08:16.762: E/ActivityThread(661): at android.content.ContextWrapper.bindService(ContextWrapper.java:473) 
03-20 13:08:16.762: E/ActivityThread(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 
03-20 13:08:16.762: E/ActivityThread(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 
03-20 13:08:16.762: E/ActivityThread(661): at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191) 
03-20 13:08:16.762: E/ActivityThread(661): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850) 
03-20 13:08:16.762: E/ActivityThread(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 
03-20 13:08:16.762: E/ActivityThread(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 
03-20 13:08:16.762: E/ActivityThread(661): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-20 13:08:16.762: E/ActivityThread(661): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-20 13:08:16.762: E/ActivityThread(661): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-20 13:08:16.762: E/ActivityThread(661): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-20 13:08:16.762: E/ActivityThread(661): at java.lang.Thread.run(Thread.java:856) 
03-20 13:08:16.772: E/StrictMode(661): null 
03-20 13:08:16.772: E/StrictMode(661): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService has leaked ServiceConnection [email protected]2af40 that was originally bound here 
03-20 13:08:16.772: E/StrictMode(661): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:969) 
03-20 13:08:16.772: E/StrictMode(661): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 
03-20 13:08:16.772: E/StrictMode(661): at android.app.ContextImpl.bindService(ContextImpl.java:1418) 
03-20 13:08:16.772: E/StrictMode(661): at android.app.ContextImpl.bindService(ContextImpl.java:1407) 
03-20 13:08:16.772: E/StrictMode(661): at android.content.ContextWrapper.bindService(ContextWrapper.java:473) 
03-20 13:08:16.772: E/StrictMode(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 
03-20 13:08:16.772: E/StrictMode(661): at com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 
03-20 13:08:16.772: E/StrictMode(661): at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191) 
03-20 13:08:16.772: E/StrictMode(661): at com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850) 
03-20 13:08:16.772: E/StrictMode(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 
03-20 13:08:16.772: E/StrictMode(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 
03-20 13:08:16.772: E/StrictMode(661): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
03-20 13:08:16.772: E/StrictMode(661): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
03-20 13:08:16.772: E/StrictMode(661): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
03-20 13:08:16.772: E/StrictMode(661): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
03-20 13:08:16.772: E/StrictMode(661): at java.lang.Thread.run(Thread.java:856) 

내가 가지고있는 로그 내가 사고를 얻었다 후 (응용 프로그램이 충돌하기 전에 나는 부분을 삭제)입니다 필요합니다. 나는 이미이 문제에 대해 하루 만에 다뤘다. 누군가가 나를 해결할 수 있기를 바랍니다. 고맙습니다.

답변

1

시간을내어이 문제에 도움을 주신 분께 감사드립니다. 나는 내 문제를 발견했다. TodayExpenseList.java에서 onPause 라이프 사이클 메소드. 내 응용 프로그램을 짝사랑하게 만드는 SQLlite 데이터베이스를 닫으려고했습니다. onPause 메서드에서 SQLlite 데이터베이스 close() 메서드를 제거한 후에는 모든 것이 잘됩니다.