2013-10-15 91 views
1

我是android新手。我開發了一個小型聊天應用程序,它具有註冊頁面,登錄屏幕和好友列表屏幕。當用戶註冊並登錄時,他將被重定向到朋友列表頁面。它運作良好。我用sharedpreference一旦用戶註冊第二次,他們直接重定向到朋友列表頁面。但是,這不是我關閉我的應用程序。即使關閉應用程序,如何保持服務活着?

任何人都可以幫助我嗎?

在此先感謝。

這是我Registration.java

private ServiceConnection mConnection = new ServiceConnection() { 


public void onServiceConnected(ComponentName className, IBinder service) { 

     imService = ((IMService.IMBinder)service).getService(); 
    } 

    public void onServiceDisconnected(ComponentName className) { 
     // This is called when the connection with the service has been 
     // unexpectedly disconnected -- that is, its process crashed. 
     // Because it is running in our same process, we should never 
     // see this happen. 
    imService = null; 
     Toast.makeText(SignUp.this, R.string.local_service_stopped, 
       Toast.LENGTH_SHORT).show(); 
    } 
}; 

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



setContentView(R.layout.sign_up_screen); 
setTitle("Sign up"); 


Button signUpButton = (Button) findViewById(R.id.signUp); 
Button cancelButton = (Button) findViewById(R.id.cancel_signUp); 
usernameText = (EditText) findViewById(R.id.userName); 
passwordText = (EditText) findViewById(R.id.password); 
passwordAgainText = (EditText) findViewById(R.id.passwordAgain); 
eMailText = (EditText) findViewById(R.id.email); 

SharedPreferences pref = getSharedPreferences("ActivityPREF", Context.MODE_PRIVATE); 
if(pref.getBoolean("activity_executed", false)){ 
Intent intent = new Intent(this, FriendList.class); 
startActivity(intent); 
finish(); 
} else { 
Editor ed = pref.edit(); 
ed.putBoolean("activity_executed", true); 
ed.putString("username", usernameText.getText().toString()); 
ed.putString("password", passwordText.getText().toString()); 
ed.commit(); 
} 

signUpButton.setOnClickListener(new OnClickListener(){ 
public void onClick(View arg0) 
{ 
if (usernameText.length() > 0 &&  
passwordText.length() > 0 && 
passwordAgainText.length() > 0 && 
eMailText.length() > 0 
) 

{ 

if (passwordText.getText().toString().equals(passwordAgainText.getText().toString())){ 

if (usernameText.length() >= 5 && passwordText.length() >= 5) { 

Thread thread = new Thread(){ 
String result = new String(); 
@Override 
public void run() { 
result = imService.signUpUser(usernameText.getText().toString(), 
passwordText.getText().toString(), 
eMailText.getText().toString()); 

handler.post(new Runnable(){ 

public void run() { 
if (result.equals(SERVER_RES_RES_SIGN_UP_SUCCESFULL)) { 
/*editor.putString("register","true"); 
editor.commit();*/ 
Toast.makeText(getApplicationContext(),R.string.signup_successfull, Toast.LENGTH_LONG).show(); 
startActivity(new Intent (SignUp.this, Login.class)); 
SignUp.this.finish(); 

} 
else if (result.equals(SERVER_RES_SIGN_UP_USERNAME_CRASHED)){ 
Toast.makeText(getApplicationContext(),R.string.signup_username_crashed,  Toast.LENGTH_LONG).show(); 
//showDialog(SIGN_UP_USERNAME_CRASHED); 
} 
else //if (result.equals(SERVER_RES_SIGN_UP_FAILED)) 
{ 
Toast.makeText(getApplicationContext(),R.string.signup_failed, Toast.LENGTH_LONG).show(); 

} 
} 

}); 
} 

}; 
thread.start(); 
} 
else{ 
Toast.makeText(getApplicationContext(),R.string.username_and_password_length_short, Toast.LENGTH_LONG).show(); 

} 
} 
else { 
     Toast.makeText(getApplicationContext(),R.string.signup_type_same_password_in_password_fields, Toast.LENGTH_LONG).show(); 

//的ShowDialog(TYPE_SAME_PASSWORD_IN_PASSWORD_FIELDS); }

} 
else { 
Toast.makeText(getApplicationContext(),R.string.signup_fill_all_fields, Toast.LENGTH_LONG).show(); 
} 
} 
}); 


} 

這是Login.java

private ServiceConnection mConnection = new ServiceConnection() { 
    public void onServiceConnected(ComponentName className, IBinder service) { 

     imService = ((IMService.IMBinder)service).getService(); 

     if (imService.isUserAuthenticated() == true) 
     { 
     Intent i = new Intent(Login.this, FriendList.class); 
startActivity(i); 
Login.this.finish(); 
     } 
    } 

    public void onServiceDisconnected(ComponentName className) { 

    imService = null; 
     Toast.makeText(Login.this, R.string.local_service_stopped, 
       Toast.LENGTH_SHORT).show(); 
    } 
    }; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

startService(new Intent(Login.this, IMService.class)); 


    setContentView(R.layout.login_screen); 
    setTitle("Login"); 

    Button loginButton = (Button) findViewById(R.id.login); 
    cancelButton = (Button) findViewById(R.id.cancel_login); 
    usernameText = (EditText) findViewById(R.id.userName); 
    passwordText = (EditText) findViewById(R.id.password); 

    loginButton.setOnClickListener(new OnClickListener(){ 
public void onClick(View arg0) 
    { 
if (imService == null) { 
Toast.makeText(getApplicationContext(),R.string.not_connected_to_service,  Toast.LENGTH_LONG).show(); 

return; 
} 
else if (imService.isNetworkConnected() == false) 
{ 
Toast.makeText(getApplicationContext(),R.string.not_connected_to_network, Toast.LENGTH_LONG).show(); 

} 
else if (usernameText.length() > 0 && 
passwordText.length() > 0) 
{ 

Thread loginThread = new Thread(){ 
private Handler handler = new Handler(); 
@Override 
public void run() { 
String result = null; 
try { 
result = imService.authenticateUser(usernameText.getText().toString(), passwordText.getText().toString()); 
} catch (UnsupportedEncodingException e) { 

e.printStackTrace(); 
} 
if (result == null || result.equals(AUTHENTICATION_FAILED)) 
{ 

handler.post(new Runnable(){ 
public void run() {  
Toast.makeText(getApplicationContext(),R.string.make_sure_username_and_password_correct, Toast.LENGTH_LONG).show(); 


} 
}); 

} 
else { 


handler.post(new Runnable(){ 
public void run() { 
Intent i = new Intent(Login.this, FriendList.class);  
//i.putExtra(FRIEND_LIST, result); 
startActivity(i); 
Login.this.finish(); 
} 
}); 

} 

} 
}; 
loginThread.start(); 

} 
else { 

Toast.makeText(getApplicationContext(),R.string.fill_both_username_and_password,  Toast.LENGTH_LONG).show(); 

} 
} 
    }); 

    cancelButton.setOnClickListener(new OnClickListener(){ 

public void onClick(View arg0) 
{ 
imService.exit(); 
finish(); 

} 

    }); 


} 
+2

後一些代碼,是什麼你已經完成 –

+0

在你的服務中創建一個線程並啓動它。保持線程活着直到你想讓你的應用程序運行:) –

+0

線程內應該做些什麼@ satya – user2873624

回答

0

也許 '前景' 服務是你想要的。

http://developer.android.com/guide/components/services.html#Foreground

前臺服務是一個被認爲是東西 用戶正在積極瞭解並因此不能對系統 候選人殺時內存不足的服務。前臺服務必須爲位於「正在進行」 標題下的狀態欄提供 通知,這意味着除非 服務停止或從前臺移除,否則不能撤消通知。

例如,從服務播放音樂音樂播放器應設置爲在前臺運行,因爲用戶明確知道它的操作的 ...

相關問題