27 thg 6, 2018

Bản beta đầu tiên

Sau 6 tháng cả team cặm cụi làm việc điên cuồng, bản alpha cũng được giới thiệu ra toàn bộ công ty và được testing nội bộ công ty mà thôi. Version này chỉ gồm các tính năng cơ bản cần có của ứng dụng nhưng cũng làm cả toàn bộ công ty sôi sục vì sản phẩm khá “đinh” về cả UI/UX so với cái sản phẩm hiện tại có UI khá basic và truyền thống.
Vì bản nội bộ dùng nhưng team cũng nhận được rất nhiều feedback về sản phẩm như cái nút này khó bấm, chưa có nút đăng xuất, sao cái hình hiển thị trên 2 máy lại khác nhau, tính năng đang chạy thì crash trên galaxy Y.... Nhưng chính sự quan tâm này lại kích thích sự làm việc cật lực hơn của team. và việc cập nhật phiên bản lại diễn ra từng ngày. Có thời điểm trong 1 ngày team gửi vài version mới cho toàn bộ nhân viên trong công ty để update tính năng cũng như fix các lỗi. Điều này làm cho nhân viên các bộ phận khác thích thú vì sự đóng góp của họ đã được ghi nhận. Sau 2 tuần, phiên bản beta đã có với 1 số tính năng mới, hoàn chỉnh fix các lỗi mà feedback gửi về và sẵn sàng để lên store và cho người dùng cuối sử dụng. Đến lúc này team vẫn chưa sử dụng công cụ quản lý chuyên nghiệp nào. Timeline vẫn là tờ A4 với chi chiết các nét mực, Bug được cập nhật thủ công vào 1 file excel, cũng chả có tool nào về quản lý dự án cả. Điều này chứng tỏ khi cả team đã đặt tâm huyết vào dự án thì mọi công cụ quản lý chỉ là thứ yếu. Dự án vẫn chạy tiến độ nhanh và tốt. Lại tiếp, sau khi đã có bản beta, team quyết định email cho BOD báo cáo tiến độ phát triển sản phẩm và sẵn sàng launching sản phẩm đến người dùng cuối. Việc này làm cả công ty háo hức, và nó như là 1 cột mốc đánh dấu của anh em trong team làm sản phẩm, ghi nhận mọi người và chờ đợi phản hồi của mọi người bên ngoài văn phòng nhỏ này về sản phẩm.
LAUNCHING SẢN PHẨM....

Dự án bắt đầu

Sau khi chốt được nhân sự làm dự án, team bắt đầu làm việc. Việc đầu tiên là setup dự án đều do CTO làm như khởi tạo dự án, chọn tool làm việc. Sau đó phân công rõ ràng Boss sẽ làm về phần server- backend, còn mình phụ trách dev phần client - frontend,. cụ thể là android. Chẳng có tiến độ cụ thể gì cả, vài tuần đầu tiên sếp và mình gục đầu vào viết để cho ra 1 cái protocol giao tiếp thống nhất giữa client và server. Sau khi việc lên xuống gửi lệnh giữa server và client đã nhịp nhàng mới bắt đầu bắt tay vào làm các tính năng. Khi này lại phát sinh các tính năng gì sẽ được ưu tiên phát triển đầu tiên. Và sau khi thảo luận, cuối tuần quyết định mồi và lôi kéo được 1 bạn ở team sản phẩm của dự án hiện tại tham gia vào nhóm, hỗ trợ lên danh sách các tính năng hiện tại của sản phẩm cũ, và sort theo danh sách các tính năng ưu tiên cần có và cho ra là 1 tờ A4 là các tính năng của sản phẩm mới. Tờ này được dán ở chỗ làm việc của mình và sếp. Tờ này đặc biệt là ở chỗ chả có thời gian deadline gì cả, cứ làm thôi. Khi nào xong tính năng thì mình hoặc sếp lại đánh dấu done. Sau khi phát triển được 1 vài tính năng cơ bản, testing hệ thống khá ok thì phát sinh ra vấn đề cần phải có bên tester tham gia vào vì Dev chỉ tập trung phát triển tính năng cũng mệt rồi vì tính năng thì qua nhiều. Vậy là đề xuất tuyển tester và mở rộng thêm dev bên back-end vì dù sao sếp vẫn phải quản lý các team khác, dự án cũ để đảm bảo hoạt động kinh doanh. Tuyển nhân sự tốn nhiều thời gian nên quyết định sẽ mời 1 số bạn back-end đang làm sản phẩm cũ có hứng thú tham gia vào team. Nhưng cũng lúc này thì có vấn đề xảy ra, các bạn backend cũ tham gia vào nhưng không đáp ứng được tiến độ. Không phải là họ không có khả năng và năng lực để thực hiện các task mà là do họ đang làm việc ở các dự án cũ theo phong cách chậm rãi quen nên khi đưa vào thực hiện dự án ở giai đoạn đầu, họ thích làm việc theo các task với mốc deadline rõ ràng và team không đáp ứng được điều đó và sau đó quyết định out, về làm dự án cũ hoặc rời công ty. Sau việc này team quyết định không mời members của dự án cũ nữa mà sẽ tuyển nhân sự mới hoàn toàn. Việc này cho phép team có thể tìm được nhân sự phù hợp với sản phẩm ngay từ đầu, và tất nhiên việc này sẽ tốn thời gian vì team phải chấp nhận việc nhân sự ra vào dự án là bình thường, nhưng sẽ tìm được nhân sự phù hợp cho dự án. Sau khi build được team toàn các nhân sự phù hợp, mọi chuyện sẽ nhanh hơn rất nhiều. Cuối cùng team cũng build được nhân sự khá ổn. 2 back-end, 2 front-end(android, ios), 1 testing, và sếp sẽ quản lý. Vậy là cũng build được 1 team chiến thực sự. Và lúc này công việc mới thực sự trôi chảy và đi.
BẢN BETA ĐẦU TIÊN....

Cơ hội bất ngờ

Như đã nói, sau khi nghỉ việc ở công ty 60 ngày, mình cũng chưa nghĩ đến sẽ làm ở đâu. Bây giờ là đầu tháng 10, cũng nhân cơ hội này nghỉ xả hơi 1 thời gian trước khi quyết định sẽ làm gì tiếp theo. Sau vài ngày dành cho sở thích và các công việc cá nhân thì mình cảm thấy bắt đầu nhớ ‘công việc’. Cũng lúc đấy, mình nhận được letter mời phỏng vấn làm việc của công ty tiếp theo. Đọc CV thì thấy cũng là công ty làm sản phẩm về công nghệ, dự án sắp triển khai khá thú vị và rất mới tại việt nam, team cũng build từ đầu(mình cực thích các dự án từ đầu), và đặc biệt là mình cũng đang muốn đi làm, vậy là nhận lời phỏng vấn ngay. Ngày phỏng vấn, mình đến gặp chị giám đốc nhân sự và trưởng phòng tech. Việc phỏng vấn khá thoải mái và suôn sẻ. Sau đó offer phúc lợi làm việc và quyết định ngày đi làm luôn, nghĩa là không cần thông báo qua email. Đấy là cơ hội để mình được làm việc trong dự án mà hiện tại đang rất nổi bật trong các startup tại Việt Nam. StartUp này hiện tại đang tăng trưởng mạnh và là leader trong ngành này, startup gọi được vốn nhiều nhất Việt Nam năm 2016.
Thời gian đầu mình vào công ty thì công việc chính là phát triển tiếp sản phẩm hiện tại của công ty. Sản phẩm hiện tại khá basic và hiện đang dùng cho khoảng vài trăm người dùng của công ty. Dự án có vẻ boring vì không có nhiều thử thách về công nghệ và sản phẩm đã khá hoàn thiện, chủ yếu duy trì dự án, và tinh chỉnh các chức năng cũ và thêm 1 số tính năng mới theo phòng kinh doanh đề xuất. Sau 1 tháng thì đùng 1 cái công ty quyết định thay đổi chiến lược sản phẩm để đáp ứng và đón đầu xu hướng của thị trường. MỌI THỨ THAY ĐỔI.
Thay đổi toàn diện từ công ty, BOD thay đổi CEO, CEO tuyển và bổ nhiệm CTO mới. CTO bắt đầu cải tổ lại phòng IT và tập trung toàn bộ lực lượng cho phát triển sản phẩm mới. Thực ra nói tập trung lực lượng cho sản phẩm mới nhưng khi bắt đầu chỉ có 2 người là mình và sếp CTO mới về. Anh em trong Trung tâm IT còn lại được phục vụ cho các dự án đang có sẵn. Vậy là dự án làm sản phẩm mới được khởi động ban đầu với 2 người. Mình được chọn là chỉ may mắn vì cả phòng lúc này mỗi mình biết mobile.
DỰ ÁN BẮT ĐẦU....

12 thg 6, 2018

Thất bại liên tiếp

Sau khi thành công với sản phẩm Game giáo dục đầu tiên thì sau đó mình có tham gia làm những sản phẩm tiếp theo nhưng gặp thất bại ê chề. Nó đúng với câu nói mà mình biết “Thánh nhân đãi kẻ khù khờ”. Theo như câu này được hiểu đơn giản như lần đầu bạn đi câu thì luôn câu được nhiều hơn lần tiếp theo. Và nó đúng với mình.
Ở công ty đầu tiên, như đã nói sau khi làm 1 game được ghi nhận và xem như thành công nếu xét ở khía cạnh người dùng, doanh thu, thương hiệu studio việt, bọn mình đẩy nhanh làm game play cho game tiếp theo với 1 sự tin tưởng lớn là sẽ tiếp tục thành công. Vì nghĩ như vậy nên có lẽ nó đã failed rất nhanh. Thành công thì bao gồm nhiều thứ hội tụ lại còn thất bại chỉ cần nghĩ sai 1 thứ thôi. Ở game thứ 2 là game play(cách chơi của game). Mình ko đi phân tích chi tiết hơn về thất bại của game này. Chỉ là sau khi team họp nhiều lần và tìm ra nguyên nhân để so sánh với game trước thì thống nhất nguyên nhân chính là game play. Và đây là thất bại bắt đầu cho thất bại tiếp theo
CÔNG TY TỒN TẠI 60 NGÀY!!!! Sau đó ở công ty thứ 2, mình interview vào 1 công ty StartUp đúng nghĩa. “Lý do tại sao mình nghỉ việc ở công ty đầu tiên thì mình sẽ viết trong 1 post khác về việc chuyển việc”. Trở lại nói 1 chút về công ty, khi mình interview vào công ty thì công ty đã bắt đầu được 1 tháng, team lúc đó khoảng 6 người. Như mình nói công ty này là startup khởi nghiệp đúng nghĩa. Công ty được mở ra là 1 anh Việt kiều úc, anh sinh năm 83 và là doanh nhân khá thành đạt. Bố mẹ là Hoa kiều tại Việt Nam và có tiềm lực về tài chính. Anh về Việt Nam và nhận thấy thời điểm này Game trên Mobile đang rất nổi nên mở công ty. (Hầu như lúc này doanh số bán smartphone chưa nhiều, độ tiếp cận ở Việt Nam chưa cao nhưng các thị trường khác thì đã phổ biến hơn.). Anh về VN và đầu tư xây dựng 1 công ty phát triển game. Anh không tham gia vào điều hành công ty nhiều, tất cả các vấn đề anh giao cho người bạn thân(làm văn phòng pháp lý) phụ trách điều hành. Anh chỉ đến công ty 1 số ngày trong tháng khi cần. Vì là doanh nhân và dân đầu tư nên việc tỉ suất lợi nhuận trên đồng vốn đầu tư là quan trọng nhất nên việc phát triển công ty đều do bạn anh thực hiện. Ngày mình phỏng vấn đầu tiên, mình chỉ gặp team lead của công ty và bạn anh. Mọi việc phỏng vấn đều ok và chỉ còn vướng mắc 1 chút chuyện offer. Sau đấy, bạn anh có gửi offer và mình không đồng ý với offer đó. Và sau đấy nhận được mail và đại lý rằng anh muốn gặp mình để hỏi thêm trước khi quyết định ký hợp đồng hay không. Buổi thứ 2 thì mình gặp anh. Và sau buổi đó thì mọi việc ok và mình bắt đầu vào làm cho công ty ngay thứ 2 tuần sau. Trở lại công việc, vì là team đang bé nên tất cả thành viên công ty đều làm chung sản phẩm. Sản phẩm đang làm là 1 Game bài + 1 App transfer files. Vì mới bắt đầu được 1 tháng nên xem như dự án cũng mới bắt đầu, khung sản phẩm cũng dần ổn định cả phía mobile và server. Về thiết bị và môi trường làm việc thì perfect, tất cả máy tính đều là mac, các thiết bị test đều là điện thoại tốt nhất bấy giờ, server tự mua và setup tự do, đồ uống thoải mái, bàn làm việc rộng và thoải mái. NHƯNG Vì mình đang nói đến thất bại của mình sẽ nói ra những suy nghĩ theo cảm nhận của mình rằng tại sao công ty này lại giải thể sau 60 ngày tồn tại. Thứ nhất về ban điều hành, vì anh là doanh nhân nên khả năng kinh doanh tốt nhưng anh không sát sao điều hành, bạn anh điều hành toàn bộ công việc của công ty nhưng lại không xuất phát từ dân kinh doanh về công nghệ, không hiểu nhiều và sâu sắc về làm sản phẩm, ngành phần mềm. Đây là điểm chính khiến cho quan điểm người người lãnh đạo và nhân viên không thông suốt. khi team còn nhỏ, thành viên họ cần người lãnh đạo hiểu biết nhiều hơn việc chỉ trả tiền lương. Dù sao sẽ có người bảo rằng sao nhiều công ty lớn có sếp là dân kinh doanh vẫn thành công. Mình cũng đồng ý nhưng đã là kinh doanh về làm sản phẩm công nghệ, khi bắt đầu từ lúc còn nhỏ, khởi nghiệp thì người lãnh đạo cần có hiểu biết sâu sắc trong việc làm sản phẩm. Khi công ty đã lớn hơn, cần mở rộng và quan tâm đến nhiều bộ phận khác thì việc mindset của người làm kinh doanh lúc này sẽ tốt hơn. Vì vậy, mình cho rằng lý do đầu tiên là sếp điều hành công ty không có hiểu biết sâu sắc về sản phẩm công ty. Lý do thứ 2 là team thực thi. Mình đánh giá team làm khá tốt và tiến độ có phần nhanh và đáp ứng được yêu cầu. Nhưng văn hoá làm việc của team, mở rộng ra của công ty là chưa có. Các anh em làm việc chưa có sự gắn kết nhiều, điều này cũng đúng vì team cũng mới thành lập mà. Tuy vậy, leader của team là một người khá giỏi về kỹ thuật, thực hiện hầu hết các task khó trong sản phẩm nhưng đổi lại tính khí lại thất thường. Điều này nghe có vẻ bình thường nhưng lại là điểm yếu chết người. Vì không nằm trong ban điều hành, không có nhiều quyền lợi hơn thành viên khác, ban điều hành không hiểu về sản phẩm nên giao cho leader quản lý hết về kỹ thuật, nên khi xảy ra mâu thuẫn với ban điều hành thì tiến độ phát triển có vấn đề ngay và sau đó mâu thuẫn quá lớn nên anh này đã xin nghỉ, đến bây giờ cả team vẫn không hiểu nổi lý do đằng sau của việc này là gì. Sau đó, anh này có bàn giao hết công việc lại cho mình, vì mình mới vào được vài tuần nhưng khi đó vị trí là sub team lead nên được team lead có bàn giao lại. Lúc này mình mới nhận ra công ty đã để team lead nắm quá nhiều và sâu về sản phẩm. Sau đó 2 ngày thì sếp có họp toàn bộ nhân viên công ty là quyết định off công ty khá bất ngờ dù sản phẩm đã có thể release và bắt đầu launching. Đây là 2 lý do chính. Sự việc thì quá bất người với anh em trong công ty nhưng bản thân mình lúc đó cho việc này là bình thường. Động viên anh em đừng quá bi quan về startup trong lĩnh vực công nghệ. Đến bây giờ khi startup ở Việt nam đang nổi lên, mình cũng luôn bảo lưu quan điểm này, đừng quá bất ngờ, khi sự việc tệ đi tệ đi thì rất nhanh. Tất nhiên, công ty có trả cho nhân viên 2 tháng tiền lương tiếp theo như là tiền trong lúc tìm công việc mới. Vì vậy nên mình nghĩ đây là 2 nguyên nhân chính dẫn đến việc công ty này chỉ tồn tại trong vòng 60 ngày dù có rất nhiều ưu thế khác như vốn khởi đầu nhiều, dự án tiềm năng lớn, năng lực của team rất ổn. Đúng là để thành công thì cần rất nhiều yếu tố, nhưng thất bại thì chỉ cần 1 vài yếu tố không tốt.
Trên đây là vài thất bại quan trọng trong quá trình làm sản phẩm mà mình trải qua. Thất bại nào cũng cay đắng và mang lại nhiều thứ thay đổi. Chỉ khi thất bại đau đớn, bạn mới nhìn nhận lại sự việc và tạo ra sự thay đổi. Nhưng mình luôn tâm niệm rằng như câu nói khi một cánh cửa đóng lại, cánh cửa tốt hơn lại mở ra và chờ đón mình ở phía trước.

Trở thành người làm sản phẩm?

Năm 3, khi còn ngồi trong trường đại học, mình đã rất may mắn khi được 1 anh khoá trên đã ra trường giới thiệu cho công việc full time đầu tiên. Công việc đến rất tình cờ và đến bây giờ mình cũng chưa biết tại sao anh đó biết biết rằng mình biết ngôn ngữ lập trình đó mà giới thiệu công việc cho vì trước đó cũng chưa đụng chạm người anh gặp đó lần nào. Sau này biết được rằng bác đó khá giỏi trong việc học tập, là 1 trong 2 người tốt nghiệp nhất khoa của trường mình, vào làm cho 1 công ty Game lớn nhất tại thị trường Việt nam và bây giờ hiện là người làm sản phẩm ‘best of the best’ của Grab, công ty gọi xe lớn nhất thị trường Đông Nam Á. Người anh mà mình được gặp đúng 1 lần cũng trong buổi phỏng vấn đầu tiên trong đời.
Đại ý là thế này. Anh này làm Developer ở công ty. Sếp của anh này làm cố vấn cho 1 công ty startup mới thành lập đang cần tìm nhân sự cho 1 mảng mới nên nhờ nhân viên cấp dưới giới thiệu cho các bạn sinh viên đã biết. Và mình may mắn đúng target của anh. Một hôm mình nhận được tin nhắn ”Em muốn đi làm không? Có công ty này hay lắm.” Ban đầu cũng hơi bất ngờ và hoài nghi. Sau thì cũng nhận vì đằng nào cũng đang rảnh, đồ án thì đã xong mà gia đình thì ở xa, thế là nhận lời phỏng vấn. Buổi phỏng vấn đầu tiên trong sự nghiệp là ở 1 quán cafe gần nhà của người sếp này(Sau này anh boss này giúp đỡ mình rất nhiều trong công việc). Hôm đó chạy con Wave Alpha đến gặp vào buổi chiều, buổi phỏng vấn mà không phải phỏng vấn. Boss chỉ hỏi về các đồ án từng làm trong trường, bảng điểm thế nào, đã thích đi làm chưa. Và sau đó có giới thiệu qua về công ty như sau. Công ty này là công ty chuyên outsource nghĩa là làm các dự án cho công ty, tổ chức bên ngoài và thu tiền công thực hiện dự án đó. Và nếu vào thời điểm phỏng vấn khác thì mình đã làm outsource rồi và có khi page này nên đặt là người làm outsourcing. Cơ duyên là công ty này đang muốn mở 1 mảng product làm 1 số sản phẩm nội bộ do công ty phát triển và phát hành. Lĩnh vực được chọn là làm game. Sau đó boss này hỏi mình thích không? Mình ok và deal done. Buổi phỏng vấn đầu tiên kết thúc. Sau buổi đó mình có mặt ở công ty gặp boss trực tiếp vài lần, chủ yếu để làm hợp đồng và xem nơi làm việc.
Đấy là câu trả lời tại sao mình trở thành người làm sản phẩm. Câu trả lời chỉ gồm 2 chữ May mắn và việc chọn người.

Lời mở đầu

Trước khi viết về những câu chuyện, xin nói rõ hơn về mục đích ra đời của page là muốn mọi người có cảm nhận và nhìn nhận về công việc của việc phát triển sản phẩm trong các công ty công nghệ, từ lúc sơ khai ý tưởng, ra đời, thực hiện ý tưởng cho đến lúc sản phẩm cất cánh được hàng triệu người biết đến. Hàng loạt các câu chuyện gặp phải trong quá trình này.
Để bắt đầu xin nói về câu hỏi mà gây nhiều tranh cãi “Người chọn việc hay việc chọn người?”, nó giống như “Con gà có trước hay quả trứng có trước”. Dù bạn ở trường phái nào, chọn phương án nào thì cũng chúc mừng bạn vì bạn đã có quyết định của riêng mình. Còn riêng, tôi trong trường hợp của tôi, “Việc đã chọn người”. Tôi bắt đầu được tham gia vào làm các sản phẩm một cách tình cờ, không như dự định ban đầu đề ra. Khi còn đang thực tập tốt nghiệp cho đến khi ra trường tôi không có ý định sẽ đầu quân cho 1 công ty startup làm về sản phẩm nghĩa là công ty này có ý tưởng về một sản phẩm nào đó có khả năng đáp ứng nhu cầu nào đó, sau đó tự lên kế hoạch phát triển và phát hành ra thị trường. Nó khá giống với việc bạn kết hôn và sinh ra 1 baby vậy. Bạn có trách nghiệm và nghĩa vụ nuôi baby đó lớn lên. Nó khác hoàn toàn với các công ty outsourcing. Các phần sau sẽ nói rõ hơn về sự khác biệt giữa các công ty làm sản phẩm ‘product’ và các công ty gia công ‘outsourcing’. Việc may mắn được tham gia vào các công ty startup chuyên làm sản phẩm và các công việc này đã chọn tôi đã mang lại cho tôi rất nhiều trải nghiệm sâu sắc, khác biệt về công việc của việc phát triển sản phẩm, sau này gọi là mindset của người làm sản phẩm.
Nếu xem sản phẩm của công ty như một MV thì những người tham qua vào quá trình làm ra đều được gọi là người làm sản phẩm. Đó có thể là người lên ý tưởng, người biên tập, quay phim, sản xuất, tất tần tật để cho ra đời MV đó. Điều khác biệt MV thành công hay không chỉ là kết quả của MV đó đạt được mục đích đề ra hay không như ý nghĩa truyền đạt, lượt xem, tầm ảnh hưởng của sản phẩm đến công chúng, doanh thu... Việc phát triển một sản phẩm công nghệ cũng như vậy.
Với người dùng họ nghĩ rằng việc thành công nhất của một sản phẩm là tiền nghĩa là sản phẩm mang lại giá trị lớn, tầm ảnh hưởng rộng là thành công. Còn với chính người làm sản phẩm đó, thành công chính là sự ghi nhận những nỗ lực được đền đáp xứng đáng trong quá trình làm sản phẩm đó. Những cảm xúc trong quá trình làm từ lúc Product in development, first user, cho đến khi được mọi người biết đến. Đó là cảm xúc khi sản phẩm của mình được hiện diện ở mọi nơi từ poster ở rạp phim, decan trên xe buýt, hay chính trên banner quảng cáo trong cái điện thoại của thằng bạn đang chơi game bên cạnh. Đó là sự ghi nhận lớn nhất mà người làm sản phẩm cảm nhận và tự hào.
Bài viết này sẽ là các câu chuyện mà bạn gặp phải trong quá trình làm sản phẩm. Nếu bạn làm ở ngành nghề khác, bạn có thể hình dung được việc phát triển 1 sản phẩm công nghệ mà bạn đang dùng như Zalo, Facebook, Instagram,... là như thế nào, tại sao những sản phẩm đó có mặt trên thế giới này và nó ra đời như thế nào... Còn nếu bạn đang làm việc trong ngành tech, trong các công ty công nghệ bạn sẽ bắt gặp đâu đó là hình ảnh của chính mình, là công việc đang từng thực hiện, là cảm xúc thật bạn đã trải nghiệm qua.
Xin nhắc lại, những câu chuyện này luôn là sự thật, ghi lại những khoảnh khắc thật từ những con người thật. Đó chính là sứ mệnh của Page!

25 thg 5, 2012

Làm việc với Service trong Android.

Bài viết nhằm mục đích hiểu về gọi đến 1 service theo con đường gọi phương thức bindService() trong lập trình Android.
Mục tiêu : Tạo 1 service có chức năng tính toán và trả về kết quả của phương thức cộng 2 số nguyên.

Màn hình chương trình khi gọi phương thức cong2so(5,5) từ 1 service như sau :

Hàm onCreate(bundle) : nhận các đối tượng về từ giao diện :

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.tv);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }

Trước hết, tạo 1 lớp có tên là MyService mở rộng từ lớp Service như sau :
public class MyService extends Service {

    // Binder cho cac client
    private final IBinder mBinder = new LocalBinder();
   
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return mBinder;
    }
    //phương thức cho các client có thể gọi.
    public int cong2So(int a, int b){
        return a + b ;
    }
   
    public class LocalBinder extends Binder {
        // Trả về đối tượng MyService để cho client có thể gọi public method
        MyService getService(){
            return MyService.this;
           
        }       
    }
}

Trở lại Activity chính của ứng dụng :

Trong hàm OnStart() chúng ta dùng phương thức bindService(parameter) để gọi đến MyService thông qua đối tượng Intent .
 
@Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        // Bind to MyService
        Intent i = new Intent(this, MyService.class);
        bindService(i, mConnection, Context.BIND_AUTO_CREATE) 
    }

Trong hàm onStop() : Ngắt kết nối đến MyService
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        //Unbind from Service
        if(mBound){
            mService.unbindService(mConnection);
            mBound = false ;
           
        }
    }

Tạo 1 biến mConnection từ lớp ServiceConnection nhằm Overide 2 phương thức sau nhằm bound đến MyService.
private ServiceConnection mConnection = new ServiceConnection() {
       
        @Override
        public void onServiceDisconnected(ComponentName name) {
            mBound = false;
        }
       
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            // Bound to MyService.
            LocalBinder binder = (LocalBinder) service;
            mService = binder.getService();
            mBound = true;
        }
    };;;

Cuối cùng trong phương thức onClick của button ta gọi đến hàm cong2so(int,int) và hiển thị kết quả của phương thức ra 1 textview như sau :
@Override
    public void onClick(View v) {
        if(v.getId() == R.id.button){
            if(mBound){
                int result = mService.cong2So(5, 5);
                tv.setText(new String().valueOf(result));
            }
        }
    }

Trong Android manifesh.xml thêm dòng này :  <service android:name="MyService"></service> trong thẻ <application>

file main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>



Bản beta đầu tiên

Sau 6 tháng cả team cặm cụi làm việc điên cuồng, bản alpha cũng được giới thiệu ra toàn bộ công ty và được testing nội bộ công ty mà thôi. ...