Android中定時器的學習總結

來源:互聯網
上載者:User

 直接上一段代碼,當然其中還有很多無用的代碼,定時器怎麼用,我已用紅色標識,已經很清楚了,當然這並不是一個完整的Demo,僅供參考Timer的用法:

   
public class QuoteRankingListActivity extends Activity  {

int m_sortType = DataLayer.SortType_None;
int m_Offset = 0;
boolean m_SortDesc = true;
public int m_listType;
private Handler mHandler;
private int m_nActivePage = 0;
private int m_nTotalPage = 0;
private ListView mStockListView = null;
public String ActivityKind;
private int stocklist_count = 10;
private ProgressDialog mProgDialog;
ListStockAdapter m_listAdapter;
List<QuoteData> m_ListQuote = new ArrayList<QuoteData>();
Timer timer;
TimerTask task;

public void setTitle(String title) {
Message message = new Message();
message.what = 0x01010101;
message.obj = title;
if (mHandler != null) {
mHandler.sendMessage(message);
}
}

private int GetSortType() {
int sortType = m_sortType;
if (m_SortDesc)
sortType |= (1 << 16);
return sortType;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.stock_list);
Button editbtn = (Button) findViewById(R.id.buttonEdit);
TextView v = (TextView) findViewById(R.id.myStockTitle);
editbtn.setVisibility(View.GONE);
v.setVisibility(View.GONE);
m_listType = getIntent().getIntExtra("listType", 0);
String name = getIntent().getStringExtra("name");
mStockListView = (ListView) findViewById(R.id.listView1);
mStockListView.setOnItemClickListener(this);
ActivityKind = getIntent().getStringExtra("ActivityKind");
m_nTotalPage = DataLayer.getInstance().GetStockCount(m_listType)
/ stocklist_count;
View button = null;
final int[] columns = { R.id.columnCR, R.id.columnNP, R.id.columnVol,
R.id.columnVR };
for (final int col : columns) {
button = (View) findViewById(col);
if (button != null) {
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

try {
int column = Integer.parseInt((String) v.getTag());
if (column != m_sortType) {
m_sortType = column;
m_SortDesc = true;
} else {
m_SortDesc = !m_SortDesc;
}
m_Offset = 0;
mProgDialog = ProgressDialog.show(
QuoteRankingListActivity.this, "等待中",
"正在擷取資料...", true, true);
DataLayer.getInstance().GetCodeList(m_listType,
m_Offset, stocklist_count, GetSortType(),
QuoteRankingListActivity.this);
} catch (Exception e) {
Log.e("ColumnHeaderClick", e.getMessage());
}
}
});
}
}
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0x01010101) {
TextView tv = (TextView) findViewById(R.id.title_bar);
tv.setText((String) msg.obj);
} else if (msg.what == 0x01010102) {

                                       / /定時從伺服器端請求列表資料
DataLayer.getInstance().GetCodeList(m_listType, m_Offset,
stocklist_count, GetSortType(),
QuoteRankingListActivity.this);
}
}
};
m_ListQuote = DataLayer.getInstance().GetCodeList(m_listType, 0, 20,
GetSortType(), QuoteRankingListActivity.this);
m_listAdapter = new ListStockAdapter(QuoteRankingListActivity.this,
R.layout.stock_list_item, m_ListQuote);
               CreateTask();
               timer=new Timer();
       timer.schedule(task, 2000, 3000);//第一次是2秒重新整理,間隔3秒後在迴圈操作

Button queryButton = (Button) findViewById(R.id.buttonQuery);
// 點擊右上方的"個股查詢"所觸發的點擊事件
queryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog(0);
}
});
if (name != null) {
String title = String.format("行情-%s", name);
setTitle(title);
} else {
setTitle("行情");
}

}
public void CreateTask(){
           task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 0x01010102;
mHandler.sendMessage(message);
}
};

}

       //當然定時器不用的時候或者切換到別的功能頁的時候,要把它給適時的關閉掉。當再次到達用到定時器的頁面時,定時器開啟。我以下用到的幾個生命週期函數不一定非得都要用上,可以視情況而用。
protected void onPause() {
        if(timer!=null){
        timer.cancel();
        timer=null;
        }
super.onPause();
}
@Override
protected void onStop() {
        if(timer!=null){
        timer.cancel();
        timer.purge();
        timer=null;
        }

super.onStop();
}
@Override
protected void onDestroy() {
        if(timer!=null){
        timer.cancel();
        timer=null;
        }

super.onDestroy();
}
@Override
protected void onResume() {
if(timer==null)
{
CreateTask();
timer=new Timer();
timer.schedule(task, 2000, 3000);
}
super.onResume();
}
@Override
protected void onRestart() {
super.onRestart();
}
protected void moveToPage(int page) {

m_Offset = page * stocklist_count;
DataLayer.getInstance().GetCodeList(m_listType, m_Offset,
stocklist_count, GetSortType(), this);
}

public void onLeftFling() {
if (m_nActivePage == m_nTotalPage - 1)
return;
m_nActivePage += 1;
moveToPage(m_nActivePage);
}

public void onRightFling() {
if (m_nActivePage == 0)
return;
m_nActivePage -= 1;
moveToPage(m_nActivePage);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.stock_list, menu);
return true;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
View v=view;
return v;
}
}

}

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.