Question

I think my title is no good enough to explain when my android will crash. I got 3 tab widgets on my application. It means I got 3 activity (accountMainThread.java, TodayExpenseList.java and settingThread) adapt to each of the tab widget. Here's my tab activity code.

    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);

This only part of my work. Well, my application will begin at the first tab(accountMainThread), and the application is work fine. Then, I tab second tab (todayExpenseList) and still the same, nothing wrong. Then, I tab third tab(settingThread) and still the same, nothing wrong. The problem is when I tab whatever tab for next, either 1st tab or 2nd tab or 3rd tab, my application is crash. I hope my explaining is well understand enough.

Here's my complete tabActivity code

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;
    }           
}



}

Here's the log I have after I got crash (I delete the part before application is crash)

03-20 13:08:16.742: E/ActivityThread(661): Service com.android.exchange.ExchangeService has leaked ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40cefa88 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 com.android.emailcommon.service.ServiceProxy$ProxyConnection@40cefa88 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 com.android.emailcommon.service.ServiceProxy$ProxyConnection@40cefa88 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 com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d2af40 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 com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d2af40 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 com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d2af40 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)

I will provide any explaination and code if needed. I have been deals with this problems for one days already. I really hope someone will help me solved it out. Thank you

Was it helpful?

Solution

Thank you for anyone who spent their time helping with this problems. I have found my problems. In TodayExpenseList.java , on the onPause life cycle method. I tried to close SQLlite database that make my application crush. After I removed SQLlite database close() method on onPause method, every things become fine.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top